반복하지 않고 다차원 배열에서 특정 "키"배열을 얻는 방법


115

다음과 같은 다차원 배열 (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()마법을 할 수 있습니다.


"한 번의 함수 호출로 ID 배열을 얻을 수 있습니까?" 예,하지만 함수를 작성해야합니다.)
Boris Guéry 2011

@ BorisGuéry, 나는 내장 함수를 의미 했습니다 :-)
ifaour

2
PS : foreach($users as $user) {$ids[] = $user['id'];}한 줄로 쓸 수 있다는 것을 알고 있습니다 ! 하지만 당신은 내가 의미 / 필요한 것을 알고 있습니다 :-)
ifaour

@Eugene, 분명히 다른 것들에 대한 배열이 필요합니다. 그리고 이것은 단지 재미와 PHP에서 새로운 속기 학습을위한 것입니다.
ifaour 2011

답변:


261

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

좋아, 이제 function ($ar) {return $ar['id'];}키의 반환 값 과 유사한 네이티브 함수가 있다면 멋질 것입니다! :-)
ifaour 2011

1
글쎄, 그것은 "일체형"함수는 아니지만 Closure (익명 함수)는 그러한 처리에 사용될 수있는 매우 강력한 개념입니다. 당신은 그것들을 사용하는 방법을 알고 싶어 할 것입니다.
Boris Guéry 2011

나도 열쇠를 받고 싶다면? $ arr = [ 'ball'=> [ 'basket'=> 5]]; 나는 얻고 싶다 : $ ball = [ 'ball'=> 5];
Angger

2
@Angger 그렇다면이 질문과 다른 질문이 있습니다. 예를 들어 입력이이면 결과가 무엇인지와 같이 예상되는 동작을 자세히 언급 하는 한 자유롭게 물어 보십시오 ['ball' => ['golf' => 7, 'basket' => 5, 'soccer' => 6], 'shuttle' => ['badminton' => 1]].
phihag

PHP7.4부터 array_map화살표 기능과 함께 사용할 수 있습니다 .$ids = array_map(fn ($ar) => $ar['id'], $users);
user3601546

13

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과 같이 원하는 이름으로 변경). 여기에서 소스보기


3

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

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

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


-1

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

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


첫 번째 예제는 배열을 반환하지 않고 배열에서 $ user [ 'name']에 대해 발견 된 마지막 값만 반환합니다. $ carry에 푸시 / 추가하고 이동하면서 $ carry를 반환해야합니다.
Progrock
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.