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

3

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

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是数组的第二个键,但没有运气! 我错在哪里了呢? 感谢您提前回答...


do{}while() 不适合用于获取数据,应始终使用 while(){} - zerkms
3个回答

17

in_array()会在values中搜索,而不是键。

你可以选择以下方法之一:

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

2
@Felix:确实;我已经编辑了我的答案,说这是一个坏主意——现在它是第三个提议(我已经添加了isset作为第二个提议,所以最后一个是“坏”的)。 - Pascal MARTIN

2

也许你正在寻找的是array_key_exists,而不是in_array。它用于检查键是否存在于数组中,而不是值。

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

或使用isset检查它

isset($rsvp_array[15])

2

in_array() 只检查数组中的值,但您想知道特定键是否设置

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

或者

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

第二种方法在大多数情况下已经足够,但如果值为null,则无法正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接