Как создать функцию, которая фильтрует двухмерный массив по значению?
Учитывая следующий массив:
Array ( [0] => Array ( [interval] => 2014-10-26 [leads] => 0 [name] => CarEnquiry [status] => NEW [appointment] => 0 ) [1] => Array ( [interval] => 2014-10-26 [leads] => 0 [name] => CarEnquiry [status] => CALL1 [appointment] => 0 ) [2] => Array ( [interval] => 2014-10-26 [leads] => 0 [name] => Finance [status] => CALL2 [appointment] => 0 ) [3] => Array ( [interval] => 2014-10-26 [leads] => 0 [name] => Partex [status] => CALL3 [appointment] => 0 )
Как я могу фильтровать массив, чтобы показывать только те массивы, которые содержат определенное значение в ключе name
? Например name = 'CarEnquiry'
.
Результат:
Array ( [0] => Array ( [interval] => 2014-10-26 [leads] => 0 [name] => CarEnquiry [status] => NEW [appointment] => 0 ) [1] => Array ( [interval] => 2014-10-26 [leads] => 0 [name] => CarEnquiry [status] => CALL1 [appointment] => 0 ) )
РЕДАКТИРОВАТЬ
Я забыл упомянуть, что значение поиска должно быть взаимозаменяемым – например name = 'CarEnquiry'
или name = 'Finance'
.
Используйте функцию array_filter PHP с обратным вызовом.
$new = array_filter($arr, function ($var) { return ($var['name'] == 'CarEnquiry'); });
Изменить: если он должен быть взаимозаменяемым, вы можете немного изменить код:
$filterBy = 'CarEnquiry'; // or Finance etc. $new = array_filter($arr, function ($var) use ($filterBy) { return ($var['name'] == $filterBy); });
array_filter
– это функция, которая вам нужна. http://php.net/manual/en/function.array-filter.php
Дайте ему функцию фильтрации следующим образом:
function my_filter($elt) { return $elt['name'] == 'something'; }
<?php function filter_array($array,$term){ $matches = array(); foreach($array as $a){ if($a['name'] == $term) $matches[]=$a; } return $matches; } $new_array = filter_array($your_array,'CarEnquiry'); ?>
function multi_array_search_with_condition($array, $condition) { $foundItems = array(); foreach($array as $item) { $find = TRUE; foreach($condition as $key => $value) { if(isset($item[$key]) && $item[$key] == $value) { $find = TRUE; } else { $find = FALSE; } } if($find) { array_push($foundItems, $item); } } return $foundItems; }
Эта моя функция может использовать эту проблему. Вы можете использовать ;
$ filter = multi_array_search_with_condition ($ array, array ('name' => 'CarEnquiry')); Это позволит получить отфильтрованные элементы из вашего 2-мерного массива