PHP: возвращаемое значение, связанное с конкретным ключом в массиве ассоциативных массивов

В 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’? Я могу перебрать каждый элемент, чтобы проверить, существует ли эта комбинация в массиве, но есть ли более простой способ справиться с этим?

1

Решение

Если у вас есть целевой массив ключей и значений, вы можете отфильтровать основной массив, чтобы включить в него только дочерние массивы, которые соответствуют всем комбинациям ключ / значение в целевом массиве, используя 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 будет массивом всех дочерних массивов, соответствующих вашему набору пар ключ / значение, или пустым массивом, если ни один не соответствует.

0

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

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

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