2013-01-22 29 views
3

我在世界上所有國家的數組作爲這樣的:PHP array_key_exists不起作用;數組不多維

$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",); 

等了所有國家;我百分百肯定每個國家都正確列出。

我有一個應用程序窗體,它將結果存儲在服務器上存儲的文件中。目前,該應用程序的評論頁面是基本的文本版本,現在我正在將其納入模擬表單,以便讓我的客戶擁有更具視覺吸引力的審閱應用程序的方法。

所以數組名爲$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"; 
} 
?> 
+1

做'的var_dump($ IN_DATA [「country_select」]);'代替你可以確保的價值確實是一個2字符長度的字符串,它可能有前/後空間。 –

+0

'var_dump($ countries)','echo $ countries [$ in_data ['country_select']]'以及@crypticツ建議在'if'之前,並告訴我們他們說什麼。此外,虛擬的東西,但只是可以肯定的是,來自PHP手冊的代碼在你的網站中工作得很好,對吧? –

+0

你的例子對我來說工作正常..如果數組密鑰存在CA國家,回聲國家找到 –

回答

6

,因爲你是從文件中讀取,你可能會得到其他字符,嘗試修剪():

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

這個修好了,感謝Adam;不知怎的,在信件前面有一個空間。 – SC1988

+0

yw ..當從文件中讀取行時,您可能會獲得CA \ n,而不僅僅是CA –

+0

查看我自己創建文件的代碼後,看起來確實發生了這種情況。 – SC1988

1

我,而從文件中讀取數據也有類似的問題。 解決方案是從第一行刪除BOM。

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