Это ассоциативный массив:
Array ( [tableData] => Array ( [0] => Array ( [booking_name] => abc/xyz/123 [pdg] => assure [user_area] => es st [release] => oss72 [start_date] => 2017-06-20 00:00:00 [end_date] => 2017-06-23 00:00:00 [asset_info] => Array ( [0] => Array ( [status] => 10 [manufacturer] => HP [model] => HP BL460C GEN8 [hardware_color] => #0066b3 ) ) [full_name] => Valay Desai [email_address] => valay@xyz.com ) [1] => Array ( [booking_name] => abc/xyz/123 [pdg] => assure [user_area] => ls reca [release] => oss72 [start_date] => 2017-06-20 00:00:00 [end_date] => 2017-06-23 00:00:00 [asset_info] => Array ( [0] => Array ( [status] => 10 [manufacturer] => SUN [model] => SUN GEN8 [hardware_color] => #0066b3 ) ) [full_name] => Chako Desai [email_address] => chako@xyz.com ) ...... [500] => Array () ) )
Я знаю обычный способ отфильтровывать данные с помощью array_filter
и сравнивать значение. Я хотел бы искать следующие пары ключ / значение в tableData
.
Array ( [booking_name] => abc [pdg] => Array ( [0] => Array ( [name] => Invalid [value] => Invalid ) [1] => Array ( [name] => assure [value] => assure ) ) [user_area] => Array ( [0] => Array ( [name] => es st [value] => es st ) [1] => Array ( [name] => Invalid [value] => Invalid ) [2] => Array ( [name] => a&o [value] => a&o ) ) )
Идеальный вывод должен быть первым элементом из tableData
как он имеет имя_архива = abc, pdg = assure и user_area = es st
Я попробовал:
// bigarray is an originial array to be filtered // filterObj is an array with multiple filter conditions array_filter($bigarray, function ($val_array) use ($filterObj) { $intersection = array_intersect_assoc($val_array, $filterObj); return (count($intersection)) === count($filterObj); });
Это всегда возвращает пустой массив.
FYI- Я новичок в PHP
.
Обновление 1:
Я использовал ниже, чтобы получить объекты, у которых есть visible:true
. Пробовал подобное по заданному вопросу, но не смог добиться идеального результата.
$columnVisible = array( 'visible' => 1, ); $visibleColumns = array_filter($passedColumns, function ($val_array) use ($columnVisible) { $intersection = array_intersect_assoc($val_array, $columnVisible); return (count($intersection)) === count($columnVisible); });
Как применить несколько условий фильтрации, переданных в виде массива массивов в ассоциативном массиве массивов?
Попробуйте это решение.
$filters = array('pdg'=>array('xyzabc'), 'user_area'=>array('ls reca')); $filter_items = array(); foreach( $items['tableData'] as $item ){ $i=0; $is_match = true; foreach( $filters as $key=>$value){ //$is_match = true; if( !in_array( $item[$key], $value) ){ $is_match = false; break; } //$is_match = true; } if( $is_match ){ $filter_items[] = $item; } }