javascript — PHP массив фильтрации

У меня есть более 1k массивов этого формата.

[0] => stdClass Object (
[order_date] => 2017-11-23
[status] => Shipped
[destination] => "Chicago"[car_make] => YYY
[customer] => "Vic" )
[1] => stdClass Object (
[order_date] => 2017-11-24
[status] => Received
[destination] => "New York"[car_make] => ZZZ
[customer] => "Admin" )
[2] => stdClass Object (
[order_date] => 2017-11-23
[status] => Shipped
[destination] => "Detroit"[car_make] => XXX
[customer] => "Vic" )
[3] => stdClass Object (
[order_date] => 2017-11-13
[status] => Complete
[destination] => "LA"[car_make] => WWW
[customer] => "John" )

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

function cc_filter_car_data( $data )
{
return function( $key,$value ) use( $data )
{
return  array_filter( $data, function( $data_1 ) use( $key,$value )
{
return $data_1->$key === $value;
});
};
}

Пример с приведенным выше cc_filter_car_data() Я могу вернуть все массивы, где customer = Vic (фильтрует только один ключ).

Но я хочу вернуть все массивы where status=shipped или же customer = Vic или жеcar_make = ZZZ, (несколько и разные ключи)
Мой вопрос:
Как я могу решить это? Любая помощь приветствуется.
Дополнительно:
Всего каждый массив имеет 13 keys который можно отфильтровать.
Идея такова: пользователь может отправить первый фильтр как car_make затем отфильтруйте возвращенные данные на основе car_model и так далее

Смотрите хороший пример JQuery Вот
Я делаю обработку на стороне сервера

0

Решение

Создайте массив, содержащий пары k => v, которые вы хотите сопоставить, и используйте вложенный цикл foreach

$search = array();
$search['status'] = 'shipped';
$search['customer'] = 'Vic';
$search['car_make'] = 'ZZZ';
$returnArray = array();
foreach ($data as $d) {
foreach ($search as $k=>$v) {
if ($d->$k === $v) {
$returnArray[] = $d;
break;
}
}
}
print_r($returnArray);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector