php数组使用in_array无法正常工作

时间:2014-04-24 23:06:31

标签: php arrays

嗨我有一个对象数组($ perms_found)如下:

  Array
(
[0] => stdClass Object
    (
        [permissions_id] => 1
    )

[1] => stdClass Object
    (
        [permissions_id] => 2
    )

[2] => stdClass Object
    (
        [permissions_id] => 3
    )

 )

我想使用in_array查找任何permissions_id,我试过这个:

var_dump(in_array(1, $perms_found , true));

但我一直在接受:

布尔(假)

我做错了请帮帮忙?

4 个答案:

答案 0 :(得分:1)

in_array正在数组中查找1,但您的数组包含对象,而不是数字。使用访问对象属性的循环:

$found = false;
foreach ($perms_found as $perm) {
    if ($perm->permissions_id == 1) {
        $found = true;
        break;
    }
}

答案 1 :(得分:0)

首先转换为数组......

function objectToArray($object) {
    if (!is_object($object) && !is_array($object)) {
        return $object;
    }
    if (is_object($object)) {
        $object = get_object_vars($object);
    }
    return array_map('objectToArray', $object);
}

答案 2 :(得分:0)

in_array()将检查元素(在本例中为1)是否存在于给定数组中。

显然你有一个像这样的数组:

$perms_found = array(
    (object)array('permissions_id' => 1),
    (object)array('permissions_id' => 2),
    (object)array('permissions_id' => 3)
);

所以你有一个包含3个元素的数组,它们都不是数字1,它们都是对象。在这种情况下,您无法使用in_array()

如果要检查这些对象的permission_id,则必须编写自己的例程。

function is_permission_id_in_set($perm_set, $perm_id)
{
    foreach ($perm_set as $perm_obj)
        if ($perm_obj->permission_id == $perm_id)
            return true;
    return false;
}

var_dump(is_permission_id_in_set($perms_found, 1));

答案 3 :(得分:0)

您的数组是对象的集合,您要检查该数组中是否有整数。您应该首先使用array_map函数。

$mapped_array = array_map($perms_found, function($item) { return $item->permissions_id });

if (in_array($perm_to_find, $mapped_array)) {
  // do something
}