我想检查一个对象中是否存在键:
array (size=2)
0 =>
object(stdClass)[1631]
public 'label' => string 'Monsieur' (length=8)
public 'value' => string '1' (length=1)
public 'selected' => boolean true
1 =>
object(stdClass)[1633]
public 'label' => string 'Madame' (length=6)
public 'value' => string '2' (length=1)
在示例中,我有一个包含两个对象的数组,第一个包含“ selected”键。如果其中之一包含“ selected”键,我想返回true。如果对象不包含“ selected”键,我想返回false。
我可以有两个以上的对象。这仅用于示例。有功能吗?
答案 0 :(得分:1)
您可以使用简单循环来完成这项工作
$res = false;
foreach($arr as $item){
if (isset($item->selected))
$res = true;
}
在demo中查看结果
请注意,如果数组很大,则在查找目标键时需要break
循环以防止进行额外检查
您也可以使用array_filter()
$res = !!array_filter($arr, function($item){
return isset($item['selected']);
});
答案 1 :(得分:0)
首先,这里没有数组,只有对象的数组。
只需使用https://en.cppreference.com/w/cpp/named_req/AllocatorAwareContainer来检查键是否在该对象中-但是请注意,即使value为null,它也会返回 true 。
var_dump(property_exists($array[1], 'key'));
或者如果要使用数组(property_exists)进行测试:
var_dump(array_key_exists((array) $array[1], 'key'));
或作为功能
function checkInArray($array, $key)
{
$found = array_filter($array, function($el)
{
return (property_exists((array) $el, $key));
}
return (!empty($found) ? true : false)
}
if (checkInArray($yourArray, 'selected')) {
# do something
}