2016-05-12 106 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