Как отфильтровать массив, чтобы получить только объект, а не массив в переполнении стека

Я даже не уверен, что искать этот вопрос. Что я действительно хочу, так это то, что у меня есть массив таких объектов

array(3) {
[0]=>
object(stdClass)#423 (4) {
["name"]=>
string(3) "Blah"["full_name"]=>
string(10) "/Blah"["id"]=>
string(32) "BlahBlah"["parent_id"]=>
string(32) "BlahBlah"}
[1]=>
object(stdClass)#422 (4) {
["name"]=>
string(8) "Blah1"["full_name"]=>
string(9) "Blah2"["id"]=>
string(32) "BlahBlah2"["parent_id"]=>
NULL
}
[2]=>
object(stdClass)#421 (4) {
["name"]=>
string(4) "Blah3"["full_name"]=>
string(11) "Blah3"["id"]=>
string(32) "BlahBlah3"["parent_id"]=>
string(32) "BlahBlahBlah3"}
}

Я хочу фильтровать только объект, который я хочу, чтобы я сделал

   $found_label = array_filter($labels, function($obj) use($label) {
return $obj->name === $label;
});

Но тогда результаты, которые я получил, это

array(1) {
[1]=>
object(stdClass)#422 (4) {
["name"]=>
string(8) "Blah1"["full_name"]=>
string(9) "Blah1"["id"]=>
string(32) "BlahBlah2"["parent_id"]=>
NULL
}
}

Но то, что я действительно хочу, это просто

      object(stdClass)#422 (4) {
["name"]=>
string(8) "Blah1"["full_name"]=>
string(9) "Blah1"["id"]=>
string(32) "BlahBlah2"["parent_id"]=>
NULL
}

Тогда я должен сделать это, чтобы просто получить фактический объект

$theKey = key($found_label);

return $found_label[$theKey];

Я думал, что они должны быть лучшим способом сделать это, также я новичок в PHP.

0

Решение

Вы не можете сделать это с помощью array_filter, нет способа остановить его и вернуть только первый результат. Если вы не можете использовать ключ для извлечения нужного результата из массива, возвращенного из array_filter, вы должны использовать цикл. Что-то вроде этого:

$label = "wantedLabel";
foreach ($labels as $l) {
if( $l->name === $label ) {
print_r ($l);
break;
}
}
0

Другие решения

Это:

<?php

$labels = array(
"0" => (object) array('name' => "name1", "title" => "title1"),
"1" => (object) array('name' => "name2", "title" => "title2")
);

$label = "name1";

$found_label = array_filter($labels, function($obj) use($label) {
return $obj->name === $label;
});

print_r($found_label[0]);

Производит:

stdClass Object ( [name] => name1 [title] => title1 )
0

По вопросам рекламы [email protected]