Итак, у меня есть массив, который выглядит так:
$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»?
редактировать: извините, мне нужно «формат» рядом с ним.
Ты можешь использовать 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;
}
}
Других решений пока нет …