使用array_search的PHP函数不起作用

时间:2015-03-13 04:04:58

标签: php arrays

我有一个使用array_search无法正常工作的函数......这是我的代码

function LangFull($name){
    $languageCodes = array(
"abkhazian"=>"ab",
"afar"=>"aa",
"afrikaans"=>"af",
"afrikaans"=>"af-za",
"zulu"=>"zu",
"zulu"=>"zu-za"
    );
    return ucwords(array_search(strtolower($name),$languageCodes));
}

echo LangFull("zu"); /// Gives no output
echo LangFull("zu-za"); /// Gives output

与af相同没有输出...请帮助

2 个答案:

答案 0 :(得分:1)

您有两个相同的数组键:

"zulu"=>"zu",
"zulu"=>"zu-za"

您需要将其中一个命名为其他内容。

因为它们是相同的,所以试图访问其中一个是徒劳的,因为PHP不知道你要求的两个中的哪一个。

或者,如果您尝试为给定键存储多个数据值,则可以将键的值设为数组,这样可以根据需要存储更多数据。

e.g。

array (
  "afrikaans"=> array(
     "af",
     "af-za",
  ),
  "zulu"=> array(
     "zu",
     "zu-za",
  )
);

EDIT。
回答您询问有关交换键和值的问题:
你可以,Ghost已经向你展示了如何 但是,按原样保留密钥(如上面的数组示例)允许您将所有相关数据整理到一个索引中,并且可以轻松访问它。

交换值和键可能会使您更难获取所需的数据,因为您的密钥现在是"数据"。因此,要从数组中获取数据,您需要知道数据(因为它现在是关键字)并且您实际上正在抓取引用(您的密钥是什么)。

哪个有点奇怪。它可以工作,但它并不是很理想。

答案 1 :(得分:1)

如果可以互换(键值和键值)并且没有那些键冲突,那么你也可以这样做:

function LangFull($name){
    $languageCodes = array(
        "ab" => "abkhazian",
        "aa" => "afar",
        "af" => "afrikaans",
        "af-za" => "afrikaans",
        "zu" => "zulu",
        "zu-za" => "zulu",
    );
    return isset($languageCodes[$name]) ? ucwords(strtolower($languageCodes[$name])) : 'Not found';
}

echo LangFull("zu"); /// Gives output
echo LangFull("zu-za"); /// Gives output
echo LangFull("yahoo!");