【问题标题】:php- multidimensional array searchphp-多维数组搜索
【发布时间】:2014-03-12 20:19:35
【问题描述】:

我有一个多维国家/地区数组,其中包含:

  • 代码 -> 国家代码
  • name -> 国名
  • flag -> CSS sprite 标志类

针是countryCode,干草堆是$countriesArray。您将如何搜索字符串(国家代码)并返回相应的名称和标志。这个数组是不是构造不好?

数组

$CountriesArray = array(array( code => "bj", 
                               name => "Benin",
                               flag => "flag flag-bj"
                            ),

                        array( code => "bw", 
                               name => "Botswana",
                               flag => "flag flag-bw"
                            ),

                        array( code => "cg", 
                               name => "Congo",
                               flag => "flag flag-cg"
                             )
  ect....

  );

ANSWER - 数组格式已更新,键为 countryCode

$CountriesArray = array(  array( bj => array( name=> "Benin", flag => "flag flag-bj" )), 
                          array( bw => array( name=> "Botswana", flag => "flag flag-bw" )),
                          array( cg => array( name=> "Congo", flag => "flag flag-cg" ))
                   );

$n = needle 的搜索数组

function multiDimenArraySearch($n,$h){
foreach($h as $key => $value){
if($key == $n) return $value;
  }
}

$n = "bj";
$search = multiDimenArraySearch($n,$CountriesArray);

$name = $search[$n]["name"]; //outputs name
$flag = $search[$n]["flag"]; // outputs flag class

【问题讨论】:

  • 一个有意义的键会让它变得更好(例如...countryCode),因为它只是在foreach中循环并检查$currentvalue['code'] == $countryCode是否与它得到的一样好, 不用多说了吧。
  • 你的意思是像 $CountriesArray = array(bj=>array(name=>"Benin",flag=>"flag flag-bj"),array(bw=>array(name=>"博茨瓦纳”等...
  • 是的,这样会提高工作效率。

标签: php multidimensional-array


【解决方案1】:

here 上的同样问题,基本上你只需要遍历所有不同的数组。在下面的示例中,$return_val 将是国家/地区的数组。

$search_term = 'cg';
foreach($countriesArray as $c_info){
   if($c_info['code']==$search_term){
      $return_val = $c_info;
   }
}

【讨论】:

    【解决方案2】:
    for($i = 0; $i <= count($countriesArray); $i++){
        if($countriesArray[$i]["code"] == "cg"){
            return $countriesArray[$i]["name"];
        }
    }
    

    这应该可以工作

    foreach 版本:

    foreach($countriesArray as $country){
        if($country["code"] == "cg"){
            ...
        }
    }
    

    示例函数:

    function multiDimenArraySearch($n,$h){
        foreach($h as $arr){
            if($arr['code'] == $n){
                return $arr;
            }
        }
    }
    
    $search = multiDimenArraySearch("cg",$countriesArray);
    $name = $search["name"];
    

    对于搜索值是数组键:

    foreach($h as $key => $value){
        if($key == "cg") return $value;
    }
    

    【讨论】:

    • 感谢 Nasaorc,您的 foreach 版本运行良好。如果有人有同样的疑问,请阅读上面的 Wrikken 建议。
    • 搜索数组键的更新答案
    • 等等什么?如果我们只有return $array[$key]; 的密钥,为什么我们还需要一个for 循环呢?
    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2013-09-20
    • 2016-09-19
    • 2014-08-12
    相关资源
    最近更新 更多