2017-01-10 10 views
0

cakePhpのfunction query()を使用するだけです。クエリのような配列何かが返されます:私は配列は、配列をマージするのと同じcate.dateitem.codeを持っているかどうかを確認したい、今すぐ2次元配列cakephpを2つのキーとマージする方法

array(
    (int) 0 => array(
     'cate' => array(
      'date' => '2016-12-05', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '11' 
     ), 
     'cate_item' => array(
      'price' => '150.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ), 
    (int) 1 => array(
     'cate' => array(
      'date' => '2016-12-05', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ), 
    (int) 2 => array(
     'cate' => array(
      'date' => '2016-12-06', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '2' 
     ) 
    ), 
    (int) 3 => array(
     'cate' => array(
      'date' => '2016-12-06', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ) 
) 

を(このケースでは、私の配列の要素0,1です)。次のようなものを出力してください:

array(
    (int) 0 => array(
     'cate' => array(
      'date' => '2016-12-05', 
     ), 
     'cate_detail' => array(
      (int) 0 => array (
       'rel_data_category' => '11', 
       'price' => '150.000' 
      ), 
      (int) 1 => array(
       'rel_data_category' => '10', 
       'price' => '250.000' 
      ) 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ), 
    (int) 1 => array(
     'cate' => array(
      'date' => '2016-12-06', 
     ), 
     'cate_detail' => array(
      (int) 0 => array (
       'rel_data_category' => '10' 
       'price' => '250.000' 
      ) 
     ), 
     'item' => array(
      'code' => '2' 
     ) 
    ), 
    (int) 2 => array(
     'cate' => array(
      'date' => '2016-12-06', 
     ), 
     'cate_detail' => array(
      (int) 0 => array (
       'rel_data_category' => '10' 
       'price' => '250.000' 
      ) 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ) 
) 

助けてください!

まず、ループ、既存のアレイ

foreach($items as $item) { 

    // do somethind 

が続いているかどうかを確認する関数を作成後にあなたが

$filter_data = array(); 

新しいマージ配列データを格納する変数を宣言することを行うには

+0

あなたはこのためにCakePHPのクエリビルダを使用していませんか? – Beginner

+0

'$ result = $ this-> query($ query);' –

+0

'hasmany'を使って、あなたが望む配列をクエリ自体で行うことができるので、使用している完全なクエリを提供できますか? –

答えて

1

同じdateおよびcodeは新しい配列にはまだありません

// checker 
    if (!checkExist($item['cate']['date'], $item['item']['code'])) { 

親から同じ datecodeを持っているすべてのインデックス項目cate_detailcate_itemを追加します後で

$data = array(
     'cate' => $item['cate'], 
     'item' => $item['item'] 
    ); 

はその後、再びループを作成して新しい配列に追加します一時的なデータのための変数を作成します。ループ

} 
} 

だからあなたのコードは、この

ようなものです
$items = array(
    (int) 0 => array(
     'cate' => array(
      'date' => '2016-12-05', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '11' 
     ), 
     'cate_item' => array(
      'price' => '150.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ), 
    (int) 1 => array(
     'cate' => array(
      'date' => '2016-12-05', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ), 
    (int) 2 => array(
     'cate' => array(
      'date' => '2016-12-06', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '2' 
     ) 
    ), 
    (int) 3 => array(
     'cate' => array(
      'date' => '2016-12-06', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ) 
); 

$filter_data = array(); 

foreach($items as $item) { 
    if (!checkExist($item['cate']['date'], $item['item']['code'])) { 
    $data = array(
     'cate' => $item['cate'], 
     'item' => $item['item'] 
    ); 
    foreach($items as $detail) { 
     if ($detail['cate']['date'] == $item['cate']['date'] && 
      $detail['item']['code'] == $item['item']['code']) { 
     $data['cate_detail'][] = array(
      'rel_data_category' => $detail['cate_detail']['rel_data_category'], 
      'price' => $detail['cate_item']['price'] 
     ); 
     } 
    } 
    $filter_data[] = $data; 
    } 
} 

function checkExist($date, $code){ 
    global $filter_data; 
    foreach($filter_data as $data) { 
    if ($data['cate']['date'] == $date && 
     $data['item']['code'] == $code) { 
     return true; 
    } 
    } 
    return false; 
} 

pr($filter_data); 

Demo

OR

$items = array(
    (int) 0 => array(
     'cate' => array(
      'date' => '2016-12-05', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '11' 
     ), 
     'cate_item' => array(
      'price' => '150.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ), 
    (int) 1 => array(
     'cate' => array(
      'date' => '2016-12-05', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ), 
    (int) 2 => array(
     'cate' => array(
      'date' => '2016-12-06', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '2' 
     ) 
    ), 
    (int) 3 => array(
     'cate' => array(
      'date' => '2016-12-06', 
     ), 
     'cate_detail' => array(
      'rel_data_category' => '10' 
     ), 
     'cate_item' => array(
      'price' => '250.000' 
     ), 
     'item' => array(
      'code' => '1' 
     ) 
    ) 
); 

$filter_data = array(); 
$exists = array(); 

foreach($items as $item) { 
    $index_key = $item['cate']['date'].'-'.$item['item']['code']; 
    if (!isset($exists[$index_key])) { 
     $exists[$index_key] = 1; 
     $data = array(
      'cate' => $item['cate'], 
      'item' => $item['item'], 
      'cate_detail' => getItems($item['cate']['date'], $item['item']['code']) 
     ); 
     $filter_data[] = $data; 
    } 
} 

function getItems($date, $code) { 
    global $items; 
    $data = array(); 
    foreach($items as $detail) { 
     if ($detail['cate']['date'] == $date && $detail['item']['code'] == $code) { 
      $data[] = array(
      'rel_data_category' => $detail['cate_detail']['rel_data_category'], 
      'price' => $detail['cate_item']['price'] 
     ); 
     } 
    } 
    return $data; 
} 

pr($filter_data); 

Demo

+0

ありがとう助けて。それは役に立ちます! –