2012-08-09 171 views
2

我有一個數組:數組值找到關鍵

$countryList = array(
    "GB" => "United Kingdom", 
    "US" => "United States", 
    "AF" => "Afghanistan", 
    "AL" => "Albania", 
    "DZ" => "Algeria" 
); 

,並繼續...

當我得到一個國家的位置它出來,例如,美國的,但我需要將該值(值)與鍵匹配,在本例中爲'US'。我將如何做到這一點?我所見過的所有例子都是在我需要使用該值來獲得密鑰時使用密鑰來獲取值的。最理想的結果是'美國',而不是數組中的結果。

我試過echo array_keys('United States', $countryList);但它希望第一個參數在數組中,它只能作爲美國來使用,而且如果可能的話我不會將其更改爲數組。

回答

5

可以使用array_search功能:

$key = array_search("United States", $countryList); // $key = 'US'; 
+0

哇,我甚至嘗試過,直到現在它真的沒有工作。不知道我在做什麼這樣的錯誤 – Alex 2012-08-09 15:48:11

+0

很難說沒有代碼,但現在確實工作,所以:) – Zbigniew 2012-08-09 15:49:50

+0

我看到問題是我使用地理定位的國家,它最終成爲像定義('國家',$ user_details ['countryName']);,然後當我輸入COUNTRY而不是美國它不起作用。任何想法爲什麼?可能與「」或「'有關? – Alex 2012-08-09 15:55:09

3

array_search將爲您提供映射到提供值的密鑰。

$countryCode = array_search('United States', $countryList); 

如果你需要做很多次,你可以使用array_flip與價值交換的關鍵。這將提供更快的查找和翻轉的一次性成本。

$countriesByName = array_flip($countryList); 
$countryCode = $countriesByName['United States']; 
1

試試這個:array_keys($countryList, "United States");

+0

注意:數組字符串轉換在C:\ XAMPP \ htdocs中\ neou_cms \框架\傭工\ prepared_arrays.php 245行 Array – Alex 2012-08-09 15:47:03

+0

@Alex - 這將返回映射到給定值的鍵的數組 - 即使只有一個鍵。 – 2012-08-09 15:50:57

+0

是的,當發生錯誤時它是不同的。感謝您的澄清 – Alex 2012-08-09 15:53:59

3
<?php 
$array = array(
    'fruit1' => 'apple', 
    'fruit2' => 'orange', 
    'fruit3' => 'grape', 
    'fruit4' => 'apple', 
    'fruit5' => 'apple'); 

// this cycle echoes all associative array 
// key where value equals "apple" 
while ($fruit_name = current($array)) { 
    if ($fruit_name == 'apple') { 
     echo key($array).'<br />'; 
    } 
    next($array); 
} 
?> 
+0

http://php.net/manual/en/function.key.php – 2012-08-09 15:50:14

+0

這可以工作,但比使用其他答案中的內置函數要慢。 – 2012-08-09 15:52:38