0

これは非常に簡単な答えであるはずです。私はおそらくただ太っているだけですが、PHP には 2 つの配列があります。

$data1 = array(
  array(
    'qid' => 'q-prof-1-1',
    'value' => 10,
  ),
  array(
    'qid' => 'q-prof-2-1',
    'value' => 3,
  ),
);
$data2 = array(
  array(
    'qid' => 'q-prof-2-1',
    'value' => 5,
  ),
  array(
    'qid' => 'q-prof-3-2',
    'value' => 1,
  ),
);

そして、私は次の結果を得たいと思っています:

$result = array(
  array(
    'qid' => 'q-prof-1-1',
    'value' => 10,
  ),
  array(
    'qid' => 'q-prof-2-1',
    'value' => 5,
  ),
  array(
    'qid' => 'q-prof-3-2',
    'value' => 1,
  ),
);

... 2 つがマージされるように - ただし、別の qid に一致する qid が見つかった場合は、後者に置き換えます。

array_merge()array_merge_recursive()$data1 + $data2$data2 + $data1array_replace()、などを組み合わせてみましたがarray_replace_recursive()array_diff()どのオプションも 3 つではなく 2 つまたは 4 つの値を返すようです。そしてもちろん、私は SO ハンティングのかなりの分担をしました。

何か案は?あらゆる種類の大規模な反復関数よりも、短くて甘いものを好むでしょう!

前もって感謝します:)マット

編集:

$data1 と $data2の配列をキーと値のペアに変換すると、これらのマージおよび置換関数のほとんどが機能することに気付きました。

$data1 = array(
  'q-prof-1-1' => array(
    'qid' => 'q-prof-1-1',
    'value' => 10,
  ) // ... etc etc
);

...しかし、元のデータを変更する必要はありません。

4

1 に答える 1

0

連想配列を使用できない理由はありますか? そうすれば、あなたはただ持つことができます

$array = array('q-prof-1-1' => 10, 'q-prof-2-1' => 3);
$array2 = array('q-prof-2-1' =>  5, 'q-prof-3-2' => 1);

次に、$array2 をループして、$array にキーがない場合は値をプッシュします (私の記憶が正しければ key_exists())、またはキーがある場合は、必要に応じてそれらをマージしますか?

また、確かではありませんが、連想配列を使用すると、array_merge が正しく機能する可能性があります (おそらく)。

于 2013-05-10T14:47:58.797 に答える