2016-05-12 48 views
0

我下面的數組:檢查數組值與if語句總是返回(輸出)假(否則)

Array 
(
    [0] => class="amount">€39,00 
    [2] => class="subscription-details"> 
    [4] => für 
    [5] => 1 
    [6] => month 
) 

我要檢查,如果該值的第六個要素是「月」。

我用這個代碼:

print_r($test[6]); //Output month 

if($test[6] == 'month'){ 
    echo 'Alex'; //should output 
}else{ 
    echo 'Ecke'; //will output 
} 

爲什麼這段代碼將輸出「艾克」,而不是「亞歷克斯」?

編輯:

var_dump($test[6])輸出=串(12)

var_export($test[6])輸出= '月'

var_export($測試)=

<pre>array (
    0 => '<span', 
    1 => 'class="amount">&euro;39,00</span>', 
    2 => '<span', 
    3 => 'class="subscription-details">', 
    4 => 'für', 
    5 => '1', 
    6 => 'month</span>', 
)</pre> 
+0

之外,你可能在這個字符串中有一些不可打印的字符,用這種方法你可以判斷數組值中是否有任何不可見的字符(如空格) –

+0

我認爲var_export '爲整個陣列可能會更好,因爲這允許複製/粘貼的代碼,並進行一個簡單的測試:) –

+0

是的..我編輯它:p – cgee

回答

1

它確實輸出亞歷克斯。這是最簡單的測試用例,根據我的理解,它幾乎可以重複您的代碼。

<?php 
$test = [ 
    0 => 'class="amount">€39,00', 
    2 => 'class="subscription-details">', 
    4 => 'für', 
    5 => 1, 
    6 => 'month</span>', 
]; 

var_dump($test[6]); 
var_export($test[6]); 

if (trim(strip_tags($test[6])) == 'month') { 
    echo PHP_EOL.'Alex'.PHP_EOL; //should output 
} else { 
    echo PHP_EOL.'Ecke'.PHP_EOL; //will output 
} 

當我運行該腳本,我得到

string(12) "month</span>" 
'month</span>' 
Alex 

你能請出示var_export與您的陣列的結果。很有可能你在單詞月中有前導或尾隨空格。在與'month'比較之前,您可能需要trim字符串。

更新:我想你已經回答了你自己的問題,當提供var_dump結果。 $test[6]中的值不是一個月,而是month</span>

我已更新此測試並添加了strip_tags函數。這只是爲了好玩,並表明您可以輕鬆刪除多餘的標籤。

+0

我編輯我的問題..你的答案不適合我。 – cgee

+0

謝謝你的提示var_export() – cgee

0

好了,這似乎是一個問題...

var_dump($test[6]) outputs = string(12) 

month並不長12個字符。除了month