Добрый день!
Ломаю голову, листаю справочник функций, ничего не могу придумать лучше…
Есть 2 массива: исходный — $data, и массив новых данных — $new_data.
Цель — в случае соответствия значений двух ключей, заменить старые данные новыми.
Еще нужно знать каким элементам новых данных не были найдены соответсвия в исходных.
В реальном массиве исходных данных ключей больше.
Простой способ — вложенные циклы. Но, оба массива могут иметь по 1000 элементов… Моих слабых знаний не хватает, чтобы сделать по-человечески. Подскажите, как это оптимизировать?
//исходные данные
$data[] = array("a" => 'art1', "b" => '10');
$data[] = array("a" => 'art2', "b" => '20');
$data[] = array("a" => 'art3', "b" => '30');
$data[] = array("a" => 'art4', "b" => '40');
$data[] = array("a" => 'art5', "b" => '50');
$data[] = array("a" => 'art6', "b" => '60');
//новые данные
$new_data[] = array("a" => 'art1', "b" => '15');
$new_data[] = array("a" => 'art2', "b" => '25');
$new_data[] = array("a" => 'art3', "b" => '35');
foreach($data as $index => $data_val) //для каждого элемента исходных данных
foreach($new_data as $nk => $new_val) //перебираем новые данные
if($data_val["a"]===$new_val["a"]){ //если значения ключей совпали
$data[$index]["b"]=$new_val["b"]; //меняем значение
break; //дальше не ищем
}
print_r($data);
/*
Вот такой должен быть результат:
Array (
[0] => Array ( [a] => art1 [b] => 15 )
[1] => Array ( [a] => art2 [b] => 25 )
[2] => Array ( [a] => art3 [b] => 35 )
[3] => Array ( [a] => art4 [b] => 40 )
[4] => Array ( [a] => art5 [b] => 50 )
[5] => Array ( [a] => art6 [b] => 60 )
)
*/