Array 헬퍼

배열 헬퍼는 보다 복잡한 배열 사용을 단순화하기 위해 여러 기능을 제공합니다. 사용법을 크게 단순화하지 않는다면 PHP가 제공하는 기존 기능을 복제하지 않습니다.

헬퍼 로드

이 헬퍼는 다음 코드를 사용하여 로드됩니다.

<?php

helper('array');

사용 가능한 함수

사용 가능한 함수는 다음과 같습니다.

Parameters
  • $search (string) – 배열을 검색하는 방법을 설명하는 점 표기법 문자열(dot-notation string)

  • $values (array) – 검색 할 배열

Returns

배열 내에서 찾은 값 또는 null

Return type

mixed

이 방법을 사용하면 점 표기법을 사용하여 특정 키의 배열을 검색할 수 있으며 ‘*’ 와일드 카드를 사용할 수 있습니다. 다음과 같은 배열이 주어졌을때

<?php

$data = [
    'foo' => [
        'buzz' => [
            'fizz' => 11,
        ],
        'bar' => [
            'baz' => 23,
        ],
    ],
];

검색 문자열 “foo.buzz.fizz”를 사용하여 ‘fizz’의 값을 찾을 수 있습니다. 마찬가지로, baz의 값은 “foo.bar.baz”에서 찾을 수 있습니다.

<?php

// Returns: 11
$fizz = dot_array_search('foo.buzz.fizz', $data);

// Returns: 23
$baz = dot_array_search('foo.bar.baz', $data);

별표(*)를 와일드 카드로 사용하여 세그먼트를 바꿀 수 있습니다. 발견되면 모든 하위 노드를 찾을 때까지 검색합니다. 값을 모르거나 값에 숫자 색인이 있는 경우에 유용합니다.

<?php

// Returns: 23
$baz = dot_array_search('foo.*.baz', $data);

배열의 키에 점(.)이 있으면 백슬래시(\)를 사용하여 키를 이스케이프할 수 있습니다.

<?php

$data = [
    'foo' => [
        'bar.baz' => 23,
    ],
    'foo.bar' => [
        'baz' => 43,
    ],
];

// Returns: 23
$barBaz = dot_array_search('foo.bar\.baz', $data);
// Returns: 43
$fooBar = dot_array_search('foo\.bar.baz', $data);

Note

v4.2.0 이전 버전에서는 버그로 인해 dot_array_search('foo.bar.baz', ['foo' => ['bar' => 23]])23을 반환했습니다. v4.2.0 이상은 null을 반환합니다.

Parameters
  • $key (mixed) – 대상 키(key)

  • $array (array) – 검색할 배열

Returns

배열에서 찾은 값 또는 null

Return type

mixed

불확실한 깊이의 배열에 키 값이 있는 요소의 값을 반환합니다.

array_sort_by_multiple_keys(array &$array, array $sortColumns)
Parameters
  • $array (array) – 정렬할 배열 (참조로 전달).

  • $sortColumns (array) – 정렬할 배열 키와 PHP 정렬 플래그로 구성된 연관배열.

Returns

정렬 성공 여부.

Return type

bool

이 메서드는 계층적 방식으로 하나 이상의 키 값을 기준으로 다차원 배열의 요소를 정렬합니다. 아래 예시는 모델의 find() 함수에서 반환될 수 있는 다음 배열을 가져옵니다.

<?php

$players = [
    0 => [
        'name'     => 'John',
        'team_id'  => 2,
        'position' => 3,
        'team'     => [
            'id'    => 1,
            'order' => 2,
        ],
    ],
    1 => [
        'name'     => 'Maria',
        'team_id'  => 5,
        'position' => 4,
        'team'     => [
            'id'    => 5,
            'order' => 1,
        ],
    ],
    2 => [
        'name'     => 'Frank',
        'team_id'  => 5,
        'position' => 1,
        'team'     => [
            'id'    => 5,
            'order' => 1,
        ],
    ],
];

이제 이 배열을 두 개의 키로 정렬합니다. 이 메소드는 더 깊은 배열 수준의 값에 액세스하기 위해 점 표기법을 지원하지만 와일드카드는 지원하지 않습니다.

<?php

array_sort_by_multiple_keys($players, [
    'team.order' => SORT_ASC,
    'position'   => SORT_ASC,
]);

$players 배열은 이제 각 플레이어의 ‘team’ 하위 배열의 ‘order’ 값에 따라 정렬됩니다. 여러 플레이어의 ‘order’ 값이 같을 경우, ‘position’에 따라 정렬됩니다. 결과 배열은 다음과 같습니다.

<?php

$players = [
    0 => [
        'name'     => 'Frank',
        'team_id'  => 5,
        'position' => 1,
        'team'     => [
            'id'    => 5,
            'order' => 1,
        ],
    ],
    1 => [
        'name'     => 'Maria',
        'team_id'  => 5,
        'position' => 4,
        'team'     => [
            'id'    => 5,
            'order' => 1,
        ],
    ],
    2 => [
        'name'     => 'John',
        'team_id'  => 2,
        'position' => 3,
        'team'     => [
            'id'    => 1,
            'order' => 2,
        ],
    ],
];

같은 방식으로 메서드는 객체 배열도 처리할 수 있습니다. 위의 예에서 각 ‘player’는 배열로 표현되지만, ‘team’은 객체일 가능성이 더 높습니다. 메소드는 각 중첩 수준에서 요소의 유형을 탐지하고 그에 따라 처리합니다.

array_flatten_with_dots(iterable $array[, string $id = '']) array
Parameters
  • $array (iterable) – 평면화할 다차원 배열

  • $id (string) – 외부 키 앞에 추가할 선택적 ID입니다. 키를 병합하기 위해 내부적으로 사용됩니다.

Return type

array

Returns

평면화된 배열

이 함수는 점(.)을 키의 구분 기호로 사용하여 다차원 배열을 단일 키-값 배열로 평면화합니다.

<?php

$arrayToFlatten = [
    'personal' => [
        'first_name' => 'john',
        'last_name'  => 'smith',
        'age'        => '26',
        'address'    => 'US',
    ],
    'other_details' => 'marines officer',
];

$flattened = array_flatten_with_dots($arrayToFlatten);

검사 결과 $flatened는 다음과 같습니다.

<?php

[
    'personal.first_name' => 'john',
    'personal.last_name'  => 'smith',
    'personal.age'        => '26',
    'personal.address'    => 'US',
    'other_details'       => 'marines officer',
];

사용자는 스스로 $id 매개 변수를 사용할 수 있지만 반드시 사용할 필요는 없습니다. 함수는 이 매개변수를 내부적으로 사용하여 평탄화된 키를 추적합니다. 사용자가 초기 $id를 제공할 경우 모든 키에 추가됩니다.

<?php

// using the same data from above
$flattened = array_flatten_with_dots($arrayToFlatten, 'foo_');
/*
 * $flattened is now:
 * [
 *     'foo_personal.first_name' => 'john',
 *     'foo_personal.last_name'  => 'smith',
 *     'foo_personal.age'        => '26',
 *     'foo_personal.address'    => 'US',
 *     'foo_other_details'       => 'marines officer',
 * ]
 */