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


PHP array_key_exists does not work; array is not multi-dimensional

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

$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元素的名称,值是用户输入的内容。

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

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

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

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

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

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