0

PHPで2つの配列をマージしようとしています

この例を見てみましょう

$array_old = array (
  'product_title' => 'LG Nexus 4 Android Smartphone 16GB Sim-Free',
  'site' => 'http://www.amazon.co.uk/LG-Nexus-Android-...',
  'title' => 'LG Nexus 4 Android Smartphone 16GB Sim-Free',
  'price' => '300.00',
  'delivery' => '0.00',
   'codes' => 
  array (
    'mpn' => 'LG-E960',
  ),
)


$array_new = array (
  'product_title' => 'Google Nexus 4 (UK 16GB Black)',
  'price' => '319.99',
  'brand' => 'Google Nexus 4 (UK, 16GB, Black)',
  'attributes' => 'color: black',
  'codes' => 
  array (
    'SKU' => '239049',
    'mpn' => 'E960'
  ),
)

マージした後、次のものが必要です。

$array_old = array (
  'product_title' => 'LG Nexus 4 Android Smartphone 16GB Sim-Free',
  'site' => 'http://www.amazon.co.uk/LG-Nexus-Android-...',
  'title' => 'LG Nexus 4 Android Smartphone 16GB Sim-Free',
  'price' => '300.00',
  'delivery' => '0.00',
  'attributes' => 'color: black',
    'codes' => 
  array (
    'mpn' => 'LG-E960',
    'SKU' => '239049',
  ),
)

必要なのは、フィールドの書き換えを避けることです。最初の配列のすべての値を保持し、2 番目の配列の値を追加するだけです。配列の中に配列があることを思い出してください。

今、私は小さな Codeigniter フレームワーク アプリでこの方法 (array_merge 方法) を試しています:

if((isset($array_new['codes']))&&(isset($array_old['codes']))) $array_merged['codes'] = array_merge($array_new['codes'],$array_old['codes']);
elseif(isset($array_new['codes'])) $array_merged['codes'] = $array_new['codes'];
elseif((isset($scraper_content['codes']))) $array_merged['codes'] = $array_old['codes'];
if(isset($array_new)) $array_old = array_merge($array_new,$array_old);
if (isset($array_merged['codes'])) $array_old['codes'] = $array_merged['codes'];

これを行うより良い方法を知っていますか?注意が必要なのは、第 2 レベルの配列、配列内の配列です。

PS: この質問に対する適切な回答が見つかりませんでした。申し訳ありません。何か見落としがある場合やメッセージが明確でない場合は、ご質問をお待ちしております。

乾杯

4

1 に答える 1

1

二重array_mergeで試してください:

function merge_products($a, $b) {
    $merged = array_merge($b, $a);
    $merged['codes'] = array_merge($b['codes'], $a['codes']);

    return $merged;
}

http://codepad.org/gY29h814

于 2013-06-11T18:16:06.763 に答える