in_array意外结果

时间:2011-12-12 11:15:58

标签: php arrays

您好我有一个看起来像这样的数组,

    Array
(
    [0] => 40's
    [1] =>  50's
    [2] =>  60's
)

和一些看起来像这样的代码,

<?php if(isset($playable_age) && in_array('40\'s', $playable_age)) { $set = TRUE; } else { $set = FALSE; } ?>
<div class="checkbox"><?php echo $this->formbuilder->checkbox( 'playable_age[]', "40's", "40's", $set ); ?></div>
<?php if(isset($playable_age) && in_array('50\'s', $playable_age)) { $set = TRUE; } else { $set = FALSE; } ?>
<div class="checkbox"><?php echo $this->formbuilder->checkbox( 'playable_age[]', "50's", "50's", $set ); ?></div>
<?php if(isset($playable_age) && in_array('60\'s', $playable_age)) { $set = TRUE; } else { $set = FALSE; } ?>
<div class="checkbox"><?php echo $this->formbuilder->checkbox( 'playable_age[]', "60's", "60's", $set ); ?></div>

现在第一个if语句返回true,但是第二个和第三个if返回false,即使数组中存在50和60的值,为什么会这样?

3 个答案:

答案 0 :(得分:4)

看起来数组中的这些值之前有一个空格:

[1] =>  50's
[2] =>  60's
       ^

第一个值没有看到的东西:

[0] => 40's

答案 1 :(得分:0)

因为您有语法错误。

你可以这样做:

<?php 
$playable_age = array(0=>'40\'s',1=>'50\'s',2=>'60\'s');
if(isset($playable_age) && in_array('40\'s', $playable_age)) { $set = TRUE; echo "1"; } else { $set = FALSE; echo "2"; } 
if(isset($playable_age) && in_array('50\'s', $playable_age)) { $set = TRUE; echo "3"; } else { $set = FALSE; echo "4"; } 
if(isset($playable_age) && in_array('60\'s', $playable_age)) { $set = TRUE; echo "5"; } else { $set = FALSE; echo "6"; } 
if(isset($playable_age) && in_array('70\'s', $playable_age)) { $set = TRUE; echo "7"; } else { $set = FALSE; echo "8"; } 
?>

答案 2 :(得分:0)

在对数组执行逻辑检查之前,创建一个用户定义的函数,并使用array_walk调用每个数组值的trim()。