Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php数组使用in_数组不起作用_Php_Arrays - Fatal编程技术网

php数组使用in_数组不起作用

php数组使用in_数组不起作用,php,arrays,Php,Arrays,嗨,我有一个对象数组($perms\u found),如下所示: Array ( [0] => stdClass Object ( [permissions_id] => 1 ) [1] => stdClass Object ( [permissions_id] => 2 ) [2] => stdClass Object ( [permissions_id] =>

嗨,我有一个对象数组($perms\u found),如下所示:

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

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

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

 )
我想在\u数组中查找任何权限\u id,我尝试了以下方法:

var_dump(in_array(1, $perms_found , true));
但我一直得到:

布尔(假)


我做错了什么请帮助?

首先转换为数组

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);
}
_array()中的
将检查给定数组中是否存在元素(在本例中为
1

很可能您有这样一个数组:

$perms_found = array(
    (object)array('permissions_id' => 1),
    (object)array('permissions_id' => 2),
    (object)array('permissions_id' => 3)
);
因此,您有一个包含3个元素的数组,其中没有一个是数值
1
,它们都是对象。在这种情况下,不能在数组()中使用

如果要检查这些对象的
权限\u 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));

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

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

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

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

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

您正在使用stClass(对象)类型。首先转换为数组。它是一个对象数组