извлечение подмассива на основе поднабора

Итак, у меня есть массив, который выглядит так:

$countries = array();
$countries['CA'] = array('name'=>'Canada','currency'=>array('code'=>'CAD','format'=>'$#'));
$countries['US'] = array('name'=>'USA','currency'=>array('code'=>'USD','format'=>'$#'));
$countries['AR'] = array('name'=>'Argentina','currency'=>array('code'=>'ARS','format'=>'$#'));
$countries['AW'] = array('name'=>'Aruba','currency'=>array('code'=>'AWG','format'=>'ƒ#'));

Если у меня есть значение «ARS», как мне получить весь подмассив «AW»?

редактировать: извините, мне нужно «формат» рядом с ним.

-1

Решение

Ты можешь использовать array_filter чтобы вернуть только те значения из массива, которые соответствуют коду, который вы ищете:

$code = 'ARS';
$results = array_filter($countries, function($country) use ($code) {
return $country['currency']['code'] == $code;
});

$results будет массив, содержащий ноль или более элементов, в зависимости от того, сколько совпадений было найдено. Для примера массива в вашем вопросе это будет:

array(array('name'=>'Argentina','currency'=>array('code'=>'ARS','format'=>'$#')));

Вы можете просмотреть результаты или получить первый с $country = reset($results); который вернется false если ни одна страна не соответствует вашему коду.

Если вы ожидаете не более одного совпадения или хотите получить только первое совпадение, то вы можете перебрать массив и break как только вы найдете то, что ищете:

$found_country = null;
foreach ($countries as $country) {
if ($country['currency']['code'] == $code) {
$found_country = $country;
break;
}
}
1

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

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

По вопросам рекламы [email protected]