[php] PHP-객체 배열에서 객체 속성별로 항목 찾기

배열은 다음과 같습니다.

[0] => stdClass Object
        (
            [ID] => 420
            [name] => Mary
         )

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

그리고라는 정수 변수가 $v있습니다.

ID속성에 $v값 이있는 객체가있는 배열 항목을 어떻게 선택할 수 있습니까?



답변

배열을 반복하고 특정 레코드를 검색하거나 (한 번만 검색 가능) 다른 연관 배열을 사용하여 해시 맵을 작성합니다.

전자의 경우 이와 같은

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

– 후자에 대한 자세한 내용은이 질문 이후 답변을 참조 여러 인덱스에 의해 참조 PHP 배열


답변

YurkamTim 이 옳습니다. 수정 만 필요합니다 :

function ($) 다음에 “use (& $ searchedValue)”를 사용하여 외부 변수에 대한 포인터가 필요하면 외부 변수에 액세스 할 수 있습니다. 또한 수정할 수 있습니다.

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


답변

$arr = [
  [
    'ID' => 1
  ]
];

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


답변

더 우아한 해결책을 찾았 습니다 . 질문에 적응하면 다음과 같이 보일 수 있습니다.

$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]마음대로 할 수 있습니다 .


답변

class ArrayUtils
{
    public static function objArraySearch($array, $index, $value)
    {
        foreach($array as $arrayInf) {
            if($arrayInf->{$index} == $value) {
                return $arrayInf;
            }
        }
        return null;
    }
}

원하는 방식으로 사용하면 다음과 같습니다.

ArrayUtils::objArraySearch($array,'ID',$v);


답변

시험

$entry = current(array_filter($array, function($e) use($v){ return $e->ID==$v; }));

예를 들어 작업 여기