2016-09-14 2 views
0

Как установить multifilter или multicallback?PHP array_filter multi callback

Я хочу данные фильтра по City и Confirm вместе.

Входные данные:

$data1 = array(
      "L1" => array('Vanessa', 'Prague', 'OK'), 
      "L2" => array('Alex', 'Paris', 'OK'), 
      "L3" => array('Paul', 'Paris', 'OK'), 
      "L4" => array('John', 'Madrid', 'OK'), 
      "L5" => array('Jane', 'London', 'Waiting'), 
      "L6" => array('David', 'Prague', 'OK'), 
      "L7" => array('Martin', 'Prague', 'Waiting'), 
      "L8" => array('Frank', 'Prague', 'OK'), 
      "L9" => array('Joseph', 'Prague', 'Waiting'), 
      ); 

фильтр код:

$ByConfirm = 'OK'; 
$ByCity = 'Prague'; 

Ниже моя проблема. Я стараюсь использовать &&, но он работает отдельно, мне нужно сотрудничество $filterByConfirm + $filterByCity

$new = array_filter($data1, $filterByConfirm && $filterByCity); 

     $filterByConfirm = $new = array_filter($data1, function ($var) use ($ByConfirm) { 
      return ($var[2] == $ByConfirm); 
     }); 

     $filterByCity = $new = array_filter($data1, function ($var) use ($ByCity) { 
      return ($var[1] == $ByCity); 
     }); 

Фактический результат:

Name City Confirm 
Vanessa Prague OK 
David Prague OK 
Martin Prague Waiting 
Frank Prague OK 
Joseph Prague Waiting 

мне нужно:

Name City Confirm 
Vanessa Prague OK 
David Prague OK 
Frank Prague OK 
+0

Вы когда-нибудь рассматривали возможность использования базы данных для фильтрации через табличные данные? –

+0

Конечно, но я любитель. Этого решения достаточно для моего небольшого проекта, может быть, позже. –

ответ

0

Наконец, вот решение: PHP 5.2: Filter array with multiple arguments performance

$arrayToCompare = array('type'=>'fruits','has_name'=>'OK', 'has_color'=>'Prague'); 

$new = array_filter(
       $data1, 
       function ($arr) use ($arrayToCompare) { // PHP 5.3 is required here!! 
        return ($arr[2] == $arrayToCompare['has_name'] 
         AND $arr[1] == $arrayToCompare['has_color']); 
       } 
      ); 
Смежные вопросы