PHP : 연관 배열 요소를 배열의 처음으로 이동


94

연관 배열의 요소를 배열의 시작 부분으로 이동하는 가장 좋은 방법은 무엇입니까?

예를 들어 다음 배열이 있다고 가정합니다.

$myArray = array(
    'two'   => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'one'   => 'Blah Blah Blah 1',
    'four'  => 'Blah Blah Blah 4',
    'five'  => 'Blah Blah Blah 5',
);

내가하고 싶은 것은 '하나'요소를 처음으로 이동하고 다음 배열로 끝나는 것입니다.

$myArray = array(
    'one'   => 'Blah Blah Blah 1',
    'two'   => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'four'  => 'Blah Blah Blah 4',
    'five'  => 'Blah Blah Blah 5',
);
php 

답변:


182

배열 통합 연산자 ( +)를 사용하여 알려진 키 ( one)를 사용하여 원래 배열을 새 연관 배열에 조인 할 수 있습니다 .

$myArray = array('one' => $myArray['one']) + $myArray;
// or      ['one' => $myArray['one']] + $myArray;

배열 키는 고유하므로 두 위치에 존재하는 것은 불가능합니다.

배열 연산자 에 대한 문서 더 참조하십시오 .

+ 연산자는 왼쪽 배열에 추가 된 오른쪽 배열을 반환합니다. 두 배열 모두에 존재하는 키의 경우 왼쪽 배열의 요소가 사용되며 오른쪽 배열의 일치하는 요소는 무시됩니다.


3
@andrewtweber 아니요, 그렇지 않습니다.하지만 몇 가지 테스트를 수행 한 결과 Emil의 접근 방식에 비해 3 배 더 빠르며 메모리의 절반을 차지합니다. 또한 동일한 요소를 배열 끝으로 이동하는 것보다 20 % 더 많은 시간이 소요된다는 것을 발견했습니다.
Mark Eirich

5

숫자 배열 키가 있고 배열 키를 다시 색인화하려는 경우 다음 array_merge과 같이 입력하는 것이 좋습니다 .

$myArray = array_merge(array($key => $value) + $myArray );

2

조금 늦었지만 누군가가 필요할 경우를 대비하여이 작은 조각을 만들었습니다.

function arr_push_pos($key, $value, $pos, $arr) 
{
    $new_arr = array();
    $i = 1;

    foreach ($arr as $arr_key => $arr_value) 
    {
        if($i == $pos) 
            $new_arr[$key] = $value;

        $new_arr[$arr_key] = $arr_value;

        ++$i;
    }

    return $new_arr;
}

필요에 맞게 조정하거나 사용하고 인덱스를 설정 해제하여 이동하십시오. 연관 배열에서도 작동합니다.


수정 : $ new_arr [$ arr_key] = $ arr_value; 다음과 같아야합니다. if ($ arr_key! = $ key) $ new_arr [$ arr_key] = $ arr_value; 그러나 그렇지 않으면 : 훌륭합니다! 1up.
nzn

1

여기에 사용이 수행 얻는 또 다른 간단한 한 줄입니다 array_splice():

$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;

1

2 개의 배열이있는 경우 1st에는 2 번째 요소 배열의 맨 위로 이동할 요소가 있습니다.

$result = \array_replace($ArrayToMoveToTop, $myArray);

다음은 코드 샘플입니다.

//source array    
$myArray = [
    'two' => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'one' => 'Blah Blah Blah 1',
    'four' => 'Blah Blah Blah 4',
    'five' => 'Blah Blah Blah 5',
];
// set necessary order
$orderArray = [
    'one' => '',
    'two' => '',
];
//apply it
$result = \array_replace($orderArray, $myArray);
\print_r($result);

-1

배열 의 시작 부분에 키와 함께 요소를 추가하는 데 사용할 수있는 array_unshift 에 대한 PHP 매뉴얼의 주석에 함수 가 있습니다.

function array_unshift_assoc(&$arr, $key, $val)
{
    $arr = array_reverse($arr, true);
    $arr[$key] = $val;
    return array_reverse($arr, true);
}

위의 함수를 사용하여 요소를 설정 해제하고 다시 삽입하십시오.

$tmp = $myArray['one'];
unset($myArray['one']);
$myArray = array_unshift_assoc($myArray, 'one', $tmp);

보다 일반적인 접근 방식은 uksort 를 사용 하여 키별로 배열을 정렬하고 자체 정렬 기능을 제공하는 것입니다.


안녕하세요-어떤 식 으로든 배열을 정렬하고 싶지는 않지만 대답에 감사드립니다. 나는 키 요소를 알고 이동할 수 있도록하려면 해당 배열의 시작 부분에 선택은 특정 요소

나는이 "="구문 오류라고 생각합니다 :return = array_reverse($arr, true);
마크 아이리 히

또한 코드를 실행하면 하나의 요소 만있는 배열이 표시됩니다 ... :-(
Mark Eirich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.