1

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

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

通过检查

in_array('categories', $box_activ)

结果是真的

为什么我通过检查得到错误的结果

isset($box_activ['categories'])

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

4

4 回答 4

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 中的数组的工作方式非常类似于 hashmap,因为字符串也可以是索引/键:

$array['some string'] = 'some value';
echo $array['some string'];
# should print 'some value' to screen.
于 2013-10-26T19:15:24.543 回答
0

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

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

接着

isset($box_activ[$key])

将是真的,尽管不需要检查,因为 array_search 已经验证了数组中有类别的值

于 2013-10-26T19:18:37.530 回答
0

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

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

于 2013-10-26T19:15:46.267 回答
0

isset($box_activ['categories'])返回 false 因为categories是一个元素 tryisset($box_activ[0])

于 2013-10-26T19:16:34.737 回答