2016-06-11 2 views
0

У меня есть три многомерных массива. Я хочу отфильтровать значения в первом массиве, которые соответствуют двум значениям в двух других массивах.фильтр многомерных массивов с несколькими значениями

Array 1 $ a [] содержит местоположение $ a [LOC], количество $ a [QTY] и последняя дата активности $ a [ДАТА].


Массив 2 $ б [] содержит все местоположения и их последнюю дату активности


Массив 3 $ ​​с [] содержит все местоположения и их текущее количество

мне нужно удалить из array $ a местоположения, которые появляются в массиве $ b, которые имеют дату активности больше, чем в массиве $ a (для того же места) и удаляют из массива $ a местоположения с количествами, не соответствующими одному и тому же местоположению в массиве $ c.

Я пробовал сочетания петель foreach с array_intersects, но, похоже, не нашел ничего, что мне нужно.

Любая помощь была бы принята с благодарностью.

+0

Пожалуйста, покажите, что вы уже пробовали. Это должен быть просто оператор 'if()', который сравнивается с соответствующими значениями в двух других массивах. Мы не собираемся писать это для вас, но мы поможем вам исправить вашу попытку. – Barmar

+0

Вам не нужно 'array_intersect'. Просто один цикл foreach, который использует 'unset()', когда элемент соответствует критериям для его удаления. – Barmar

+0

показать некоторые примеры данных – RomanPerekhrest

ответ

0

Я решил это так,

$b_loc = array_column($b, 'LOC'); 
$b_date = array_column($b, 'DATE'); 
$c_loc = array_column($c, 'LOC'); 
$c_qty = array_column($c, 'QTY'); 

foreach ($a as $index => $val) { 
    $b_pick = array_search($val['LOC'], $b_loc); 
    if($b_pick){ 
     if($val['DATE'] <= $b_date[$b_pick]){ 
      unset($a[$index]); 
     } 
    } 
    $key_qty = array_search($val['LOC'], $c_loc); 

     if(($val['QTY']!=$c_qty[$key_qty])){ 
      unset($a[$index]); 
     } 
} 
+0

спасибо за предложения @Barmar – redd42

Смежные вопросы