@Shurra

Как пройти по двум массивам с проверкой на одинаковые ключи (PHP)?

есть два вложенных массива
Array
(
 [0] => Array
        (
            [ID] => 11
            [HINT] => 
        )
    [1] => Array
        (
            [ID] => 45
            [HINT] => 
        )
)

//------------------------вверху обрабатываемый массив--------------------//

//-----------------------внизу исходный откуда беру ПОДСКАЗКИ и по айди складываю в верхний ---------------//

Array
(
    [PROPERTY_ID] => 11
    [FILTER_HINT] => ПОДСКАЗКА-11
)
Array
(
    [PROPERTY_ID] => 45
    [FILTER_HINT] => ПОДСКАЗКА-45
)
Array
(
    [PROPERTY_ID] => 53
    [FILTER_HINT] => 
)


как перебрать массивы чтобы при совпадении по ID = PROPERTY_ID значение из ['filter_hint'] записывалось в ['hint'] ?

в hint - значение изначально пустое. а в filter_hint может меняться.. в первом массиве ключей(вложенных массивов может быть меньше чем в исходном(откуда беру FILTER_HINT))

то есть в результате вот так должно выглядеть -

Array
(
 [0] => Array
        (
            [ID] => 11
            [HINT] => ПОДСКАЗКА-11
        )
    [1] => Array
        (
            [ID] => 45
            [HINT] => ПОДСКАЗКА-45
        )
)


Подскажите пожалуйста, у меня мозг уже кипит, я запутался..
Спасибо
  • Вопрос задан
  • 293 просмотра
Решения вопроса 1
Shlop
@Shlop
Full Stack Developer (PHP/Laravel/JavaScript)
Если я верно понял задачу то один из вариантов такой.
Если в $arr1 есть ID-шники которых нет в $arr2 то на некоторых элементах HINT не заполним.
Если в $arr2 есть все ID-шники которые есть в $arr1 и даже больше, то все элементы $arr1 должны будем заполнить;

Но есть и другой вариант, можно из $arr2 сделать массив где индексы это ID, и тогда можно легко брать значения просто по индексу, типа такого $arr2[$id]
$arr1 = [
    [
        "ID" => 11,
        "HINT" => "",
    ],
    [
        "ID" => 45,
        "HINT" => "",
    ],
    [
        "ID" => 1,
        "HINT" => "",
    ],
    [
        "ID" => 2,
        "HINT" => "",
    ],
    [
        "ID" => 3,
        "HINT" => "",
    ],
];

$arr2 = [
    [
        "PROPERTY_ID" => 11,
        "FILTER_HINT" => "ПОДСКАЗКА-11",
    ],
    [
        "PROPERTY_ID" => 45,
        "FILTER_HINT" => "ПОДСКАЗКА-45",
    ],
    [
        "PROPERTY_ID" => 53,
        "FILTER_HINT" => "",
    ],
];

foreach ($arr1 as &$item1) {
    // Берём ID обрабатываемого элемента массива
    $id = $item1["ID"];
    // Проходимся по массиву с ответами и ищем элмент по ID
    foreach ($arr2 as $item2) {
        // Если ID равны запишем данные из FILTER_HINT в HINT элемента
        if ($id == $item2["PROPERTY_ID"]) {
            $item1["HINT"] = $item2["FILTER_HINT"];
            // Завершим цикл по $arr2
            break;
        }
    }
}
// Ссылка $item1 на последний элемент массива останется после окончания цикла foreach.
// Рекомендуется уничтожать её с помощью unset().
// Подробнее про это и foreach в документации по PHP https://www.php.net/manual/ru/control-structures.foreach.php
unset($item1);

// Выводим результат
echo '<pre>';
var_dump($arr1);
echo '</pre>';
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы