У меня есть более 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 Вот
Я делаю обработку на стороне сервера
Создайте массив, содержащий пары 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);
Других решений пока нет …