개발 꿀팁/PHP

php 배열에서 지정된 여러 열을 반환하는 방법

Jammie 2022. 9. 12. 14:41
반응형

php array_column 메서드는 배열에 지정된 열을 반환할 수 있지만 여러 열을 반환할 수 없습니다. 이 문서에서는 array_column 메서드의 사용을 설명하고 배열에 지정된 여러 열을 반환하는 방법을 코드 시연합니다.


1.array_column설명
array_column은 배열에 지정된 열을 반환할 수 있습니다

array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )

매개 변수 설명:

인풋
배열 열을 꺼내는 다차원 배열이 필요하다. 객체 집합을 포함하는 배열이 있는 경우 public 속성만 직접 꺼냅니다. private와 protected 속성을 모두 추출하기 위해서는 _get()과 _isset() 매직 메서드를 구현해야 합니다.

column_key
값을 반환해야 하는 열은 삭일 수 있다배열의 열 인덱스를 따오거나 배열의 열을 연관시키는 키도 속성 이름일 수 있습니다. NULL일 수도 있습니다. 이 경우 전체 배열이 반환됩니다. (index_key 인수에 맞게 배열 키를 재설정할 때 유용합니다.)

index_key
배열의 인덱스/ 키를 반환하는 열열의 정수 인덱스 또는 문자열 키 값일 수 있습니다.


예:
배열에서 열 되돌리기Name

<?php
$arr = array(
    array('id'=>1001, 'name'=>'fdipzone', 'age'=>18, 'profession'=>'programmer'),
    array('id'=>1002, 'name'=>'terry', 'age'=>19, 'profession'=>'designer'),
    array('id'=>1003, 'name'=>'alex', 'age'=>20, 'profession'=>'tester'),
);

$result = array_column($arr, 'name');

print_r($result);
?>

출력:

Array
(
    [0] => fdipzone
    [1] => terry
    [2] => alex
)

2.배열에서 지정된 여러 열을 반환하는 방법
array_column 방법 가능반환 배열에서 열을 하나 지정하지만 여러 열을 반환할 수 없기 때문에 다음과 같은 방법을 씁니다. 배열에서 여러 열을 반환할 수 있습니다. 매개 변수 호출은 array_column과 비슷합니다

<?php
/**
 * 返回数组中指定多列배열에 지정된 열을 반환합니다
 *
 * @param  Array  $input       배열의 다차원 배열 가져오기
 * @param  String $column_keys 열 이름, 쉼표로 구분된 이름, 전달되지 않으면 모든 열로 돌아가기
 * @param  String $index_key   배열의 인덱스를 반환하는 열
 * @return Array
 */
function array_columns($input, $column_keys=null, $index_key=null){
    $result = array();

    $keys =isset($column_keys)? explode(',', $column_keys) : array();

    if($input){
        foreach($input as $k=>$v){

            // 반환 열 지정
            if($keys){
                $tmp = array();
                foreach($keys as $key){
                    $tmp[$key] = $v[$key];
                }
            }else{
                $tmp = $v;
            }

            // 인덱스 열 지정
            if(isset($index_key)){
                $result[$v[$index_key]] = $tmp;
            }else{
                $result[] = $tmp;
            }

        }
    }

    return $result;
}

// 데모 코드
$arr = array(
    array('id'=>1001, 'name'=>'fdipzone', 'age'=>18, 'profession'=>'programmer'),
    array('id'=>1002, 'name'=>'terry', 'age'=>19, 'profession'=>'designer'),
    array('id'=>1003, 'name'=>'alex', 'age'=>20, 'profession'=>'tester'),
);

echo '반환 열과 색인 열'.PHP_EOL 지정;
$result = array_columns($arr, 'name,profession', 'id');
print_r($result);

echo PHP_EOL.'반환 열 지정, 색인 열 지정 안 함'. PHP_EOL;
$result = array_columns($arr, 'name,profession');
print_r($result);

echo PHP_EOL.'반환 열을 지정하지 않고 인덱스 열 '.PHP_EOL' 을 지정합니다;
$result = array_columns($arr, null, 'id');
print_r($result);

echo PHP_EOL.'반환 열, 인덱스 열'.PHP_EOL을 지정하지 않음;
$result = array_columns($arr);
print_r($result);
?>

출력:

반환 열과 색인 열 지정
Array
(
    [1001] => Array
        (
            [name] => fdipzone
            [profession] => programmer
        )

    [1002] => Array
        (
            [name] => terry
            [profession] => designer
        )

    [1003] => Array
        (
            [name] => alex
            [profession] => tester
        )

)

반환 열 지정, 색인 열 지정 안 함
Array
(
    [0] => Array
        (
            [name] => fdipzone
            [profession] => programmer
        )

    [1] => Array
        (
            [name] => terry
            [profession] => designer
        )

    [2] => Array
        (
            [name] => alex
            [profession] => tester
        )

)

반환 열을 지정하지 않고 색인 열 지정
Array
(
    [1001] => Array
        (
            [id] => 1001
            [name] => fdipzone
            [age] => 18
            [profession] => programmer
        )

    [1002] => Array
        (
            [id] => 1002
            [name] => terry
            [age] => 19
            [profession] => designer
        )

    [1003] => Array
        (
            [id] => 1003
            [name] => alex
            [age] => 20
            [profession] => tester
        )

)

반환 열을 지정하지 않고 색인 열을 지정하지 않음
Array
(
    [0] => Array
        (
            [id] => 1001
            [name] => fdipzone
            [age] => 18
            [profession] => programmer
        )

    [1] => Array
        (
            [id] => 1002
            [name] => terry
            [age] => 19
            [profession] => designer
        )

    [2] => Array
        (
            [id] => 1003
            [name] => alex
            [age] => 20
            [profession] => tester
        )

)
반응형