Как искать в массиве объекта std (массив объекта) с помощью функции php in_array?

У меня есть следующий массив объектов std

Array
(
    [0] => stdClass Object
        (
            [id] => 545
        )

    [1] => stdClass Object
        (
            [id] => 548
        )

    [2] => stdClass Object
        (
            [id] => 550
        )

    [3] => stdClass Object
        (
            [id] => 552
        )

    [4] => stdClass Object
        (
            [id] => 554
        )

)

Я хочу искать значение [id] ключ с помощью цикла. У меня есть следующее условие, чтобы проверить, существует ли значение или нет, как показано ниже

$flag = 1;
if(!in_array($value->id, ???)) {
    $flag = 0;
}

куда ??? Я хочу искать в массиве стандартных объектов [id] ключ.

Может ли кто-нибудь помочь мне в этом?

4 ответа

Решение

Если массив не слишком большой или тест необходимо выполнить несколько раз, вы можете отобразить свойства в вашем массиве:

$ids = array_map(function($item) {
    return $item->id;
}, $array);

А потом:

if (!in_array($value->id, $ids)) { ... }

Пытаться:

foreach ($array as $val) {
 if (!in_array($id, (array) $val)) {
 ...
 }
}

Почему бы просто не использовать объекты как массивы:

foreach ($array as $a) {
     if (!in_array($id, (array) $a)) {
     ...
     }
}

Предполагая, что ваш массив это имена $yourArray,

$newArr = array();
foreach ($yourArray as $key=>$value) {
    $newArr[] = $value->id;
}

И сейчас $newArr как: array(545,548,550,552,554)

И вы можете искать в нем по:

$valueOfSearch = ... ;
$flag = 1;
if(!in_array($valueOfSearch,$newArr)) {
    $flag = 0;
}
Другие вопросы по тегам