В PHP 5.5+, как мне проверить, содержит ли данный массив ассоциативных массивов определенные пары ключ / значение. Например:
$some_array = array(
array(
"value"=> 1,
"k1"=> "austin",
"k2"=> "texas",
"k3"=> "us"),
array(
"value"=> 15,
"k1"=> "bali",
"k2"=> "ubud",
"k3"=> "indonesia"),
array(
"value"=> 26,
"k1"=> "hyd",
"k2"=> "telangana",
"k3"=> "india")
));
Как вернуть значение, связанное с k1 = ‘bali’, k2 = ‘ubud’ и k3 = ‘indonesia’? Я могу перебрать каждый элемент, чтобы проверить, существует ли эта комбинация в массиве, но есть ли более простой способ справиться с этим?
Если у вас есть целевой массив ключей и значений, вы можете отфильтровать основной массив, чтобы включить в него только дочерние массивы, которые соответствуют всем комбинациям ключ / значение в целевом массиве, используя array_diff_assoc
,
$target =array(
"k1"=> "bali",
"k2"=> "ubud",
"k3"=> "indonesia");
$matches = array_filter($some_array, function($item) use ($target) {
return !array_diff_assoc($target, $item);
});
Внутри array_filter
Перезвоните, array_diff_assoc
вернет все пары ключ / значение в $target
которые не присутствуют в $item
, так что, если они все совпадают, вы получите пустой массив. Отрицание этого результата с !
вернусь true
для сопоставления массивов и false
для несоответствующих массивов.
$matches
будет массивом всех дочерних массивов, соответствующих вашему набору пар ключ / значение, или пустым массивом, если ни один не соответствует.
Других решений пока нет …