检查密钥是否存在于对象之一中

时间:2018-12-21 10:46:50

标签: php

我想检查一个对象中是否存在键:

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。

我可以有两个以上的对象。这仅用于示例。有功能吗?

2 个答案:

答案 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
}