0

次のようにほぼ似ています: PHP/mySQL - ネストされた行を多次元配列にフェッチする方法

SELECT products.NAME, products_prices.PRICE FROM products LEFT JOIN products_prices ON products.ID = products_prices.PROD_ID

これは通常次のようになります。

NAME,   PRICE
window, 1000
window, 1200
mouse,  1400

には 2 つの価格がwindowあり、価格がまったく存在しない可能性があるためです。結果を配列にしたい:

$arr = array(
             array('NAME' => 'window', 'price' => array(
                                                        array('PRICE' => 1000),
                                                        array('PRICE' => 1200)
                                                       ),
             array('NAME' => 'mouse', 'price' => array(
                                                       array('PRICE' => 1400)
                                                      )
            );

したがって、結合されたレコードはサブ配列になります。別の問題として、複数の結合が存在する可能性がありますが、LEFT JOIN のみです。これをうまく行う方法は?リンクされた例では、結合された列をメイン部分に配置していますが、これは望ましくありません。

4

2 に答える 2

2

次のようになります。

 $dataStore = array();
 foreach ($recordSet as $record){
     $dataStore[$record['NAME']]['prices'][] = $record['PRICE'];
 }

これは、1 つの商品名に複数の価格を設定できることが確実にわかっている場合にのみ機能します。

于 2012-05-03T13:49:20.470 に答える
2
//array you get from mysql:
$arrMysql = array(
             array('NAME' => 'window', 'PRICE' => 1000),
             array('NAME' => 'window', 'PRICE' => 1200),
             array('NAME' => 'mouse', 'PRICE' => 1400)
            );

$arr = array();
foreach ($arrMysql as $row) {
    if (isset($arr[$row['NAME']])) {
        if (isset($arr[$row['NAME']]['price'])) {
            $arr[$row['NAME']]['price'].push(array('PRICE' => $row['PRICE']));
        } else {
            $arr[$row['NAME']]['price'] = array(array('PRICE' => $arr[$row['NAME']]['PRICE']), array('PRICE' => $row['PRICE']));
            unset($arr[$row['NAME']]['PRICE']);
        }
    }
    else {
        $arr[$row['NAME']] = $row;
    }
}

//you get:

$arr = array(
             'window' => array('NAME' => 'window', 'price' => array(
                                                        array('PRICE' => 1000),
                                                        array('PRICE' => 1200)
                                                       ),
             'mouse' => array('NAME' => 'mouse', 'price' => array(
                                                       array('PRICE' => 1400)
                                                      )
            );

// and if you want your array:
$arr = array_values($arr);
于 2012-05-03T13:58:54.037 に答える