嗨我有一个对象数组($ 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));
但我一直在接受:
布尔(假)
我做错了请帮帮忙?
答案 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
}