簡體   English   中英

PHP Extend數組搜索功能

[英]PHP Extend array search function

我目前正在使用此方法通過鍵+值查找數組:

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的價值,但是它是子密鑰的價值。

任何想法,我必須如何擴展上述方法來實現這一目標?

試試那個功能:

 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM