0

だから私はすべての配列を特定のキー値でマージするメソッドを書こうとしていますが、私が遭遇している問題は、配列を設定解除しようとすると、重複する結果がないように、いくつかをスキップすることです物事、それは私を混乱させています。したがって、この方法を改善する方法についてのアドバイスをいただければ幸いです。私が持っている他の質問..これらの配列のそれぞれが私が探している4つのキーすべてを持っているかどうかをチェックする方法があります。

'リリース日'=>'スプレッドシートとチラシの月'=>'月次更新で広告'=>'カタログの機能'=>

だから私がやっていることはデータベース内の同じIDの配列をマージすることなので、本当に厄介なSQLクエリを実行する必要はありませんが、これらの4つのキーすべてが確実に実行されるようにする方法があるかどうか疑問に思っていますすべての結果に含まれます...1つまたはいくつでも関連付けられた値がある場合..私のメソッドはそのキーに値を追加し、キーに関連付けられた値がない場合は空の文字列を作成します。

protected function array_with_same_val($array, $key) {

    for($i = 0; $i < count($array); $i++) {
        for($j = 1; $j < count($array); $j++) {
            if(isset($array[$j]) && isset($array[$i]) && $array[$i][$key]==$array[$j][$key]) {
                $temp = array_merge($array[$i], $array[$j]);
                $array[$i] = $temp; 
                //unset($array[$j]);    
            } 
        }
    }   

    return $array;
}

これが私の配列のサンプルです(もっとたくさんの値があります、これはただアイデアを与えるためです):

    '0' => array
    (
        'Release Date' => 'September 1, 2013',
        'cp_id' => '112960' 
    ),

    '1' => array
    (
         'Spreadsheet and Flyer Month' => 'September 1, 2013',
         'cp_id' => '112960' 
    ),

    '2' => array
    (
         'Advertise in Monthly Update' => 'September 1, 2013',
         'cp_id' => '112960' 
    ),

    '3' => array
    (
       'Release Date' => 'September 1, 2013',
         'cp_id' =>  '109141' 
    ),
    );

これに関する助けをいただければ幸いです。

4

1 に答える 1

1

これを試してください($ inputは上記で指定した配列です)...

$output = array();
$requiredKeys = array('Release Date' => '', 'Spreadsheet and Flyer Month' => '', 'Advertise in Monthly Update' => '', 'Feature in Catalog' => '');

foreach ($input as $item) {
    if (array_key_exists($item['cp_id'], $output)) {
        $output[$item['cp_id']] = array_merge($output[$item['cp_id']], $item);
    } else {
        $output[$item['cp_id']] = array_merge($requiredKeys, $item);
    }
}

$output = array_values($output);

下部にあるarray_values呼び出しは、配列から文字列キーを削除するためのものです。

于 2013-03-11T19:27:56.780 に答える