in_array()和isset()的结果不同

时间:2013-10-26 19:13:35

标签: php isset

我有一个像这样的数组$ box_activ

Array
(
    [0] => categories
    [1] => add_a_quickie
    [2] => last_viewed
    [3] => whats_new
    [4] => wishlist
)

通过

进行检查
in_array('categories', $box_activ)

结果是 true

为什么我通过检查

得到 false
isset($box_activ['categories'])

我认为isset()是in_array()的性能方法。

4 个答案:

答案 0 :(得分:1)

因为检查是否设置了数组中的索引/键,而另一个检查是否为数组中的任何索引/键分配了相等的值。

Array
(
    [0] => categories
    [1] => add_a_quickie
    [2] => last_viewed
    [3] => whats_new
    [4] => wishlist
)

0,1,2,3,4是索引/键,类别add_a_quickie等是每个索引具有的值。

isset($box_activ[0])
# should then return true.

使用键和值遍历数组:

foreach($array AS $key=>$value)

PHP中的数组非常类似于散列映射,因为字符串也可以是索引/键:

$array['some string'] = 'some value';
echo $array['some string'];
# should print 'some value' to screen.

答案 1 :(得分:0)

$box_activ['categories']获取数组categories$box_activ索引的元素。该元素不存在,因为categories是索引0处元素的值。

isset确实比in_array更快,但in_array必须遍历整个数组,而isset只需要检查传递给它的变量。

答案 2 :(得分:0)

isset($box_activ['categories'])返回false,因为categories是元素try isset($box_activ[0])

答案 3 :(得分:0)

数组中没有带有“类别”键的值。类别的关键是0,因此要使用isset,您必须获取该值的键..

$key = array_search('categories', $box_activ);

然后

isset($box_activ[$key])

将是真的,虽然没有必要检查,因为array_search已经验证了数组中有类别的值