Сравнить 2 массива и изменить значение первого
К примеру если [xfields] и [short_link] одинаковые, то взять [id] и присвоить значение ключу [news_id] из другого массива.
PS: См. скриншот. В левом массиве может быть несколько [short_link] с одинаковыми значениями и всем им надо присвоить значение числа [id] из правого массива.
Пример кода со скриншота:
Left_Array
[0] => Array
(
[news_id] => NULL
[short_link] => https://site10.ru/sindrom
)
[1] => Array
(
[news_id] => NULL
[short_link] => https://site10.ru/prisoner
)
[2] => Array
(
[news_id] => NULL
[short_link] => https://site10.ru/doljen
)
[3] => Array
(
[news_id] => NULL
[short_link] => https://site10.ru/prisoner
)
[4] => Array
(
[news_id] => NULL
[short_link] => https://site10.ru/prisoner
)
Right_Array
[0] => Array (
[id] => 818
[xfields] => https://site10.ru/gods
)
[1] => Array
(
[id] => 886
[xfields] => https://site10.ru/any
)
[2] => Array
(
[id] => 4677
[xfields] => https://site10.ru/prisoner
)
[3] => Array
(
[id] => 6951
[xfields] => https://site10.ru/objorstv
)
Вопрос: Как сравнить массивы и присвоить значение [id] из Right_Array в [news_id] в Left_Array таким образом, что бы на выходе был Left_Array но со значениями [news_id] отличными от NULL ?
Ответы (1 шт):
По сути надо было пройтись по массивам в двух циклах сравнивая строки (если не ошибаюсь что-то типа рекурсии).
То есть, к примеру если в первом массиве 5 элементов, а во втором их 8, то нам надо будет пробежаться по каждому из элементов, что в итоге даст 40 итераций.
Выглядит это в коде примерно так:
for( $key_p = 0; $key_p < count($Right_Array); $key_p++ ) {
for ($key_ch = 0; $key_ch < count($Left_Array); $key_ch++) {
if ( $Left_Array[$key_ch]['short_link'] == $Right_Array[$key_p]['xfields'] ) {
$Left_Array[$key_ch]['news_id'] = $Right_Array[$key_p]['id']; //* всё ради этого действия! Теперь имеем массив с пронумерованным news_id, если были найдены совпадения
}
}
};
var_dump($Left_Array); // результат
