[php] 반복하지 않고 다차원 배열에서 특정 “키”배열을 얻는 방법

다음과 같은 다차원 배열 (MySQL 또는 서비스에서 검색)이 있다고 가정 해 보겠습니다.

array(
    array(
        [id] => xxx,
        [name] => blah
    ),
    array(
        [id] => yyy,
        [name] => blahblah
    ),
    array(
        [id] => zzz,
        [name] => blahblahblah
    ),
)

id하나의 ” 내장 “php 함수 호출 에서 의 배열을 얻을 수 있습니까 ? 또는 한 줄의 코드?
나는 전통적인 루핑과 가치를 알고 있지만 이것이 필요하지 않습니다.

foreach($users as $user) {
    $ids[] = $user['id'];
}
print_r($ids);

어쩌면 일부 array_map()와는 call_user_func_array()마법을 할 수 있습니다.



답변

PHP 5.5부터 다음을 사용할 수 있습니다 array_column.

$ids = array_column($users, 'id');

이것은 모든 최신 프로젝트에서 선호되는 옵션입니다. 그러나 php> 5.5를 지원해야하는 경우 다음 대안이 있습니다.

php 5.3부터 다음 array_map과 같이 익명 함수와 함께 사용할 수 있습니다 .

$ids = array_map(function ($ar) {return $ar['id'];}, $users);

(기술적으로 php 4.0.6+) 이전 에는 create_function대신 다음을 사용하여 익명 함수를 만들어야합니다 .

$ids = array_map(create_function('$ar', 'return $ar["id"];'), $users);


답변

PHP 5.5 이상

PHP5.5 이상부터는 array_column ()을 사용할 수 있으며, 이는 아래의 모든 것을 쓸모 없게 만듭니다.

PHP 5.3 이상

$ids = array_map(function ($ar) {return $ar['id'];}, $users);

@phihag의 솔루션은 PHP 5.3.0부터 PHP에서 완벽하게 작동합니다. 그 전에 지원이 필요한 경우 해당 wp_list_pluck을 복사해야합니다.

PHP <5.3

WordPress 3.1 이상

WordPress에는
문제를 해결하는 WordPress를 사용하는 경우 wp_list_pluck 이라는 함수가 있습니다.

PHP <5.3

WordPress를 사용하지 않는 경우 코드가 오픈 소스이므로 프로젝트에 코드를 복사하여 붙여 넣을 수 있습니다 (그리고 함수 이름을 array_pick과 같이 원하는 이름으로 변경). 여기에서 소스보기


답변

id배열의 첫 번째 키인 경우 다음을 수행합니다.

$ids = array_map('current', $users);

그러나 반드시 이것에 의존해서는 안됩니다. 🙂


답변

array_reduce()보다 기능적인 접근 방식을 선호하는 경우 에도 사용할 수 있습니다.

예를 들면 :

$userNames = array_reduce($users, function ($carry, $user) {
    array_push($carry, $user['name']);
    return $carry;
}, []);

또는 당신이 화려하고 싶다면

$userNames = [];
array_map(function ($user) use (&$userNames){
    $userNames[]=$user['name'];
}, $users);

이 방법과 위의 모든 방법은 장면 뒤에서 반복됩니다.)


답변