개체 배열에서 개체 속성별로 항목을 찾으려면 어떻게 해야 합니까?

어레이는 다음과 같습니다.

[0] => stdClass Object
(
 [ID] => 420
 [name] => Mary
)
[1] => stdClass Object
(
 [ID] => 10957
 [name] => Blah
) ... 

그리고 저는 다음과 같은 정수 변수를 가지고 있습니다.$v.

오브젝트가 있는 어레이 엔트리를 선택하려면 어떻게 해야 합니까?ID속성에는$v가치?



질문에 대한 답변



배열을 반복하여 특정 레코드를 검색하거나(한 번에 검색으로 OK), 다른 연관 배열을 사용하여 해시 맵을 빌드할 수 있습니다.

전자의 경우 이런 식으로

$item = null; foreach($array as $struct) {
if ($v == $struct->ID) {
$item = $struct;
break;
} } 

후자에 대한 자세한 내용은 이 질문과 후속 답변을 참조하십시오. – 여러 인덱스로 PHP 어레이 참조




$arr = [
[
'ID' => 1
] ];
echo array_search(1, array_column($arr, 'ID')); // prints 0 (!== false) 

위의 코드는 일치하는 요소의 인덱스를 에코합니다.false없는 경우

대응하는 요소를 취득하려면 , 다음과 같은 조작을 실시합니다.

$i = array_search(1, array_column($arr, 'ID')); $element = ($i !== false ? $arr[$i] : null); 

array_column은 배열과 객체 배열 모두에서 작동합니다.




YurkamTim 말이 맞아요.수정만 하면 됩니다.

함수($) 후에 “use(&$searchedValue)”를 통해 외부 변수에 대한 포인터가 필요합니다.그러면 외부 변수에 액세스할 수 있습니다.또한 수정할 수도 있습니다.

$neededObject = array_filter(
$arrayOfObjects,
function ($e) use (&$searchedValue) {
return $e->id == $searchedValue;
} ); 



여기서 좀 더 우아한 해결책을 찾았어요.다음과 같은 질문에 맞게 조정됩니다.

$neededObject = array_filter(
$arrayOfObjects,
function ($e) use ($searchedValue) {
return $e->id == $searchedValue;
} ); 



array_column을 사용하여 인덱스를 다시 작성하면 여러 번 찾아야 할 경우 시간을 절약할 수 있습니다.

$lookup = array_column($arr, NULL, 'id');
// re-index by 'id' 

그럼 간단하게$lookup[$id]자유자재로