문제

매우 간단해 보이는 작업을 수행하고 싶지만 이에 대해 아무것도 찾을 수 없습니다.단순히 array_splice와 유사한 배열의 하위 집합을 추출하지만 키를 사용하여 값 검색 :

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
              /* many more data I don't need here ... */);

list($name, $age, $id) = array_splice_by_keys($data,
                          array('personName', 'personAge', 'personId');

다른 모든 방법이 실패하면 키로 연관 배열을 필터링하는 내장 함수가 없나요?예를 들어:

$filteredArray = array__extract__keys__and__values($srcArray, $arrayOfWantedKeys);

// create a new array with ONLY those key => values I need
$wanted_values = array_extract_keys_and_values($data,
                  array('personName', 'personAge', 'personId');

echo $wanted_values['personName'];  

첫 번째 작업을 수행하려는 이유는 코드 전체에서 연관 배열 액세스를 반복하는 것을 좋아하지 않기 때문입니다. 많이 사용되는 값을 복사하는 것이 더 최적화된 것 같습니다(예를 들어 루프에서). )를 지역 변수에 추가하고 $somearray['name']보다 $name을 입력하는 것이 훨씬 쉽습니다.

편집하다:감사합니다. 목록과 함께 사용하면 해결책은 다음과 같습니다.

list($x, $y, $z) = array_values(array_intersect_key($array, array_flip($wantedKeys)));

array_flip의 흥미로운 사용!

도움이 되었습니까?

해결책

PHP 버전 >= 5.1.0에서는 다음을 사용할 수 있습니다. array_intersect_key:

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
          'test' => 23);
$ex = array('personName'=>0, 'personAge'=>0, 'personId'=>0);
var_dump(array_intersect_key($data, $ex));

의 값 $ex 상관없어요. 그냥 참석만 하면 돼요.

다른 팁

이것은 본질적으로 SilentGhost의 답변과 동일하지만 더 쉬울 수도 있고 약간 느릴 수도 있습니다.

array_intersect_key($array, array_flip($wantedKeys));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top