使用in_array的php数组不起作用


php array using in_array not working

Hi我有一个对象数组($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));

但我不断得到:

bool(false)

我做错了什么,请帮帮我?

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

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

首先转换为数组。。。

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);
}

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));

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

$mapped_array = array_map($perms_found, function($item) { return $item->permissions_id });
if (in_array($perm_to_find, $mapped_array)) {
  // do something
}