Это должно быть очень простой ответ, и я, наверное, просто быть толстым, но у меня есть два массива в PHP:Рекурсивный объединить два массива, или заменить последний на основе ключа
$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,
),
);
... так что два будет merged-, но, если он находит QID, соответствующий другому, заменит его последним.
Я попробовал смесь array_merge()
, array_merge_recursive()
, $data1 + $data2
, $data2 + $data1
, array_replace()
, array_replace_recursive()
, array_diff()
и т.д., и т.д., но каждые варианты, кажется, возвращает два или четыре значения, а не три. И, конечно же, я сделал свою долю в охоте на S.O.
Любые идеи? Предпочитаете что-то короткое и сладкое для массивной итерирующей функции любого рода!
Заранее спасибо :) Matt
Edit:
Я просто понял, что если я поворачиваю массивы внутри $ data1 & $ data2 в пар ключ-значение большинство из них сливаются и заменяющие функции работают, например:
$data1 = array(
'q-prof-1-1' => array(
'qid' => 'q-prof-1-1',
'value' => 10,
) // ... etc etc
);
... но я бы до сих пор, а не менять исходные данные
Эй, спасибо за ваш ответ. Я только что редактировал свой вопрос, прежде чем увидел ваш комментарий, но да, он работает с ассоциативными массивами. Однако я бы предпочел не менять исходные данные! –
hahaha, и я думаю, я не видел твоих прав. Этот ответ выглядит так: http://stackoverflow.com/questions/7819003/merge-two-arrays-with-the-same-key-but-in-different-depth?rq=1. В противном случае я думаю, что вы застряли в написании собственного рекурсивного массива_merge. Вы можете указать свою собственную функцию для слияния, как в ответе выше. И затем оттуда. Причините боль, сохраняя исходную структуру данных. – Fooldj