Если я верно понял задачу то один из вариантов такой.
Если в $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>';