1

我整个早上都在为 php in_array() 函数苦苦挣扎。最终我能够修复它,但我对为什么设置修复了问题有点困惑。

我将变量 $type 设置为字符串值(确切地说是“forum”),并将 $all_types 设置为如下所示的数组:

$all_types:

[protocol2] => protocol2
[group] => 0
[post] => 0
[forum] => 0
[article] => 0
[page] => 0
[protocol1] => 0

然后我有:

if (in_array($type,$all_types) !== FALSE) {
  "Do stuff..."
}

而“做事……”不断发生。首先我认为这是因为它点击了数组中的“论坛”键,所以我尝试将数组更改为:

[0] => protocol2
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => 0

但它仍然没有工作。最后,我将 STRICT 变量设置为 TRUE,它似乎工作正常,即使使用原始数组也是如此。

那么这是为什么呢?STRICT = TRUE 意味着针和大海捞针中的值必须是相同的类型,但是当它们匹配时它们不是都是字符串吗?当他们不将“论坛”与0进行比较时,出于某种原因,这是否匹配?

4

3 回答 3

4

它适用于类型杂耍。当您使用 'STRICT' 作为 FALSE 时,in_array 使用 '==' 运算符比较值。你知道,var_dump('string' == 0);是真的。

所以,当数组中有不同类型的值时,用严格比较来比较总是好的。

http://www.php.net/manual/en/language.operators.comparison.php

于 2012-07-20T09:51:29.537 回答
0

当您更改 $type 的值时,这将按预期工作。正如您在问题中暗示的那样,类型杂耍会导致意想不到的事情发生,因此请严格遵守。

<?php
$type      = 'forum';
$all_types = array(
    'protocol2' => 'forum',
    'group' => 0,
    'post' => 0,
    '1' => '0',
    'article' => 0,
    'page' => 0,
    'protocol1' => 0
);

if (in_array($type, $all_types, TRUE)) {
    echo "Here";
} else {
    echo "Not Here";
}
于 2012-07-20T09:50:19.667 回答
-2

看起来您应该使用 array_key_exists - 因为您正在测试数组键而不是值(这就是 in_array 所做的)。

于 2012-07-20T09:46:17.533 回答