Ответы пользователя по тегу Массивы
  • Как пройти по двум массивам с проверкой на одинаковые ключи (PHP)?

    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>';
    Ответ написан
    1 комментарий