[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);