PHP array_key_exists 不起作用;数组不是多维的

Posted

技术标签:

【中文标题】PHP array_key_exists 不起作用;数组不是多维的【英文标题】:PHP array_key_exists does not work; array is not multi-dimensional 【发布时间】:2013-01-06 02:17:06 【问题描述】:

我有一个世界上所有国家的数组:

$countries = array(
  "GB" => "United Kingdom",
  "US" => "United States",
  "AF" => "Afghanistan",
  "AL" => "Albania",
  "DZ" => "Algeria",
  "AS" => "American Samoa",
  "AD" => "Andorra",
  "AO" => "Angola",
  "AI" => "Anguilla",
  "AQ" => "Antarctica",
  "AG" => "Antigua And Barbuda",
  "AR" => "Argentina",
  "AM" => "Armenia",
  "AW" => "Aruba",
  "AU" => "Australia",
  "AT" => "Austria",
  "AZ" => "Azerbaijan",
  "BS" => "Bahamas",
  "BH" => "Bahrain",
  "BD" => "Bangladesh",
  "BB" => "Barbados",
  "BY" => "Belarus",
  "BE" => "Belgium",
  "BZ" => "Belize",
  "BJ" => "Benin",
  "BM" => "Bermuda",
  "BT" => "Bhutan",
  "BO" => "Bolivia",
  "BA" => "Bosnia And Herzegowina",
  "BW" => "Botswana",
  "BV" => "Bouvet Island",);

所有国家等等;我 100% 肯定每个国家/地区都已正确列出。

我有一个申请表,它将结果存储在服务器上的一个文件中。目前,申请的审核页面是一个基本的文本版本,我现在正在将其放入一个模拟表单中,以便我的客户有一种更具视觉吸引力的审核申请的方法。

因此,名为$in_data 的数组存储来自文件的结果。这个数组的结构是这样的"emergency_medical_insurance" => "value_user_entered"。每个键都是它形成的 html 元素的名称,值是用户输入的内容。

表单上的国家选择列表返回国家的两个字母代码。所以我要做的是搜索$countries 的值为$in_data['country_select'],然后返回国家名称。

echo $in_data['country_select']; 返回“CA”加拿大和我输入的测试国家的字母代码。

echo $countries['CA']; 返回“加拿大”

if (array_key_exists($in_data['country_select'], $countries)) 
      echo "Country Found";
 
else  echo "failed"; 

什么都不返回。

if (array_key_exists('CA', $countries)) 
      echo "Country Found";
 
else  echo "failed"; 

也不返回任何内容。而当我什么都不说时,我的意思是什么,不是空的,不是真的,不是假的;就是不运行。

我的问题很简单;下面的代码(取自官方 php 手册)与我的代码所做的完全一样,工作起来如何,但我的代码甚至不会返回 任何东西

<?php
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) 
    echo "The 'first' element is in the array";

?>

【问题讨论】:

改为var_dump($in_data['country_select']);,这样您就可以确保该值确实是一个 2 字符长度的字符串,它可能有一个前导/尾随空格。 执行var_dump($countries)echo $countries[$in_data['country_select']] 以及@crypticツ 在if 之前的建议,并告诉我们他们说什么。此外,虚拟的东西,但可以肯定的是,PHP 手册中的代码在您的网站上工作得很好,对吧? 你的例子对我来说很好..如果数组键存在 CA 国家,回显 Country Found 您使用的是 PHP 4.0.7 或更高版本吗?在这种情况下,您也可以使用 isset()。 【参考方案1】:

由于您正在从文件中读取,您可能会得到其他字符,请尝试 trim():

if (array_key_exists(trim($in_data['country_select']), $countries)) 
      echo "Country Found";
 
else  echo "failed"; 

【讨论】:

这解决了它,感谢亚当;不知何故,在字母之前有一个空格。 yw .. 从文件中读取行时 .. 你可能会得到 CA\n 而不仅仅是 CA 在查看了我自己创建文件的代码后,看来这正是发生的事情。【参考方案2】:

我在读取文件时遇到了类似的问题。 解决方案是从第一行删除 BOM。

function remove_utf8_bom($text) 
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/$bom/", '', $text);
    return $text;

【讨论】:

以上是关于PHP array_key_exists 不起作用;数组不是多维的的主要内容,如果未能解决你的问题,请参考以下文章

php array_key_exists() 与 isset() 的区别

php array_key_exists 的多维数组版本

深入理解PHP之isset和array_key_exists对比

PHP 如果array_key_exists,变量等于数组值:如何?

PHP isset, array_key_exists配合使用, 并解决效率问题

php array_key_exists, !empty 和 isset 无缘无故失败?