PHP的in_array函数,为什么这不起作用?

时间:2011-04-13 10:29:55

标签: php arrays

我有这个数组,是从数据库生成的:

do {
    $rsvp_array[$row_rsRSVP['rsv_guest']] = array(
        'id' => $row_rsRSVP['rsv_id'],
        'guest' => $row_rsRSVP['rsv_guest'],
        'confirmed' => $row_rsRSVP['rsv_confirmed']
    );
} while ($row_rsRSVP = mysql_fetch_assoc($rsRSVP));

很好,有了print_r()我明白了:

Array
(
    [1] => Array
        (
            [id] => 1
            [guest] => 1
            [confirmed] => 1
        )

    [15] => Array
        (
            [id] => 2
            [guest] => 15
            [confirmed] => 0
        )

    [5] => Array
        (
            [id] => 3
            [guest] => 5
            [confirmed] => 1
        )

    [10] => Array
        (
            [id] => 4
            [guest] => 10
            [confirmed] => 1
        )

    [6] => Array
        (
            [id] => 5
            [guest] => 6
            [confirmed] => 0
        )

)

所以我知道阵列正在运行。

现在我需要查看一个数字是否在主数组中,即:

if (in_array(15, $rsvp_array)) { echo 'OK'; }

嗯,这不起作用! 15号是阵列的第二把钥匙,但没有运气! 我哪里错了? 提前感谢您的答案...

3 个答案:

答案 0 :(得分:15)

in_array()会搜索 - 而不是搜索键。

你应该:

  • 使用array_key_exists()if (array_key_exists(15, $rsvp_array)) {...}
  • 或使用isset()来测试是否设置了某个密钥:if (isset($rsvp_array[15])) {...}
  • (糟糕的主意)使用array_keys()获取密钥,并在该密钥数组上使用in_array()

答案 1 :(得分:2)

可能你正在寻找array_key_exists in_array,用于检查数组中的值是否不是密钥。

if (array_key_exists(15,$rsvp_array))
{
  echo "ok";
}

或使用isset检查

isset($rsvp_array[15])

答案 2 :(得分:2)

in_array()只查看数组的值,但您想知道,如果设置了特定的键

if (array_key_exists(15, $rsvp_array)) { echo 'OK'; }

if (isset($rsvp[15])) { echo 'OK'; }

在大多数情况下,第二个就足够了,但如果值为null,它就不起作用。