【问题标题】:retrieving sub array based on sub sub value根据子子值检索子数组
【发布时间】:2016-11-13 19:03:49
【问题描述】:

好的,所以我有一个如下所示的数组:

$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”子数组?

编辑:抱歉,我需要它旁边的“格式”。

【问题讨论】:

  • 遍历数组直到找到它

标签: php arrays sub-array


【解决方案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;        
    }
}

【讨论】:

  • 感谢第二个 foreach 代码成功了 :) 非常感谢!
猜你喜欢
  • 2021-04-09
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多