2012-08-09 81 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