【问题标题】:PHP Extend array search functionPHP扩展数组搜索功能
【发布时间】:2015-03-01 19:06:06
【问题描述】:

我目前正在使用这种方法通过键+值来查找数组:

public static function getCountryDataByVal($array, $key, $value, &$results = array()) {
    if (!is_array($array)) {
        return;
    }

    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        self::getCountryDataByVal($subarray, $key, $value, $results);
    }

    return $results;
}

到目前为止,这工作正常,但有一个问题,我不知道如何解决它。让我们假设,我有这个数组结构:

array(8) {
    ["alpha2"]=>
        string(2) "ad"
    ["alpha3"]=>
        string(3) "and"
    ["numeric3"]=>
        string(3) "020"
    ["callingCodes"]=>
        array(1) {
            [0]=>
                string(3) "376"
        }
    ["tlds"]=>
        array(1) {
            [0]=>
                string(2) "ad"
        }
    ["currencies"]=>
        array(1) {
            [0]=>
                string(3) "eur"
        }
    ["longitude"]=>
        string(4) "42.5"
    ["latitude"]=>
        string(3) "1.5"
}

例如,我可以使用上面的方法通过alpha2 = ad 找到这个数组。但我需要的是搜索eur IN currencies 的可能性。

使用这个不起作用:

getCountryDataByVal($array, 'currencies', 'eur');

因为eur 不是键currencies 的值,而是子键的值。

任何想法,我必须如何扩展上述方法来实现这一点?

【问题讨论】:

  • getCountryDataByVal($array['currencies'], 'eur'); ? :p
  • php.net/manual/en/function.array-search.php#91365 似乎是一个不错的递归 array_search 函数
  • getCountryDataByVal($array['currencies'], 'eur');不起作用,您链接的功能不符合我的需求。
  • array_search('eur',$array['currencies']) ?

标签: php arrays recursion multidimensional-array


【解决方案1】:

试试那个功能:

 public static function getCountryDataByVal($array, $key, $value, &$results = array()) {
    if (!is_array($array)) {
        return;
    }

    if ((isset($array[$key]) && $array[$key] == $value )|| 
       (isset($array[$key]) &&  is_array($array[$key]) && array_search($value, $array[$key]) !== FALSE ) ) 
    {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        self::getCountryDataByVal($subarray, $key, $value, $results);
    }

    return $results;
}

【讨论】:

  • 未定义索引:货币
  • 你能再试一次吗,忘记在if语句中添加括号用于分组
  • 已经试过了 (if (isset($array[$key]) && ($array[$key] == $value || (is_array($array[$key]) && array_search($value, $array[$key])))))。但是,我只得到一个空结果。
  • 在 if 语句中再编辑一次,因为 array_search 返回索引(可能为 0,因此解释为 false)或 FALSE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多