programing

PHP에서 알려진 키를 가진 배열 요소를 배열 끝으로 이동하려면 어떻게 해야 합니까?

oldcodes 2023. 7. 23. 14:39
반응형

PHP에서 알려진 키를 가진 배열 요소를 배열 끝으로 이동하려면 어떻게 해야 합니까?

아주 사소한 문제로 뇌가 얼어붙는 것.다음과 같은 배열로 시작하면 다음과 같습니다.

$my_array = array(
                  'monkey'  => array(...),
                  'giraffe' => array(...),
                  'lion'    => array(...)
);

...다른 키를 사용하여 새 요소를 추가할 수 있지만 항상 배열 값을 사용할 수 있습니다.이제 첫 번째 요소에 항상 'monkey' 키가 있을 것이라고 확신할 수 있지만 다른 키는 확신할 수 없습니다.

배열 채우기를 마치면 다른 요소의 순서를 방해하지 않고 알려진 요소 'monkey'를 배열 끝으로 이동합니다.이것을 하는 가장 효율적인 방법은 무엇입니까?

제가 생각할 수 있는 모든 방법은 약간 투박해 보이고 저는 명백한 것을 놓치고 있는 것처럼 느껴집니다.

이 작업을 수행할 수 있는 유일한 방법은 제거한 다음 추가하는 것입니다.

$v = $my_array['monkey'];
unset($my_array['monkey']);
$my_array['monkey'] = $v;

array_shift는 인덱스 설정을 해제하는 것보다 효율성이 낮지만 다음과 같이 작동합니다.

$my_array = array('monkey' => 1, 'giraffe' => 2, 'lion' => 3);
$my_array['monkey'] = array_shift($my_array);
print_r($my_array);

또 다른 대안은 콜백 및 uksort입니다.

uksort($my_array, create_function('$x,$y','return ($y === "monkey") ? -1 : 1;'));

PHP 5.3+를 사용하거나 정기적으로 함수를 전역 함수로 정의하는 경우 적절한 람다를 사용할 수 있습니다.

저는 원 라이너로서의 우아함에 대한 @Gordon의 답변을 정말 좋아하지만, 대상 키가 배열의 첫 번째 요소에 존재하는 경우에만 작동합니다.어떤 위치에서든 키에 대해 작동할 수 있는 또 다른 원라이너가 있습니다.

$arr = ['monkey' => 1, 'giraffe' => 2, 'lion' => 3];
$arr += array_splice($arr, array_search('giraffe', array_keys($arr)), 1);

데모

  • 배열 유니온 연산자의 방식 때문에 숫자 키에서 이 작업이 실패합니다.+=)는 숫자 키(데모)와 함께 작동합니다.
  • 또한 이 스니펫은 대상 키가 배열에 존재한다고 가정합니다.대상 키가 존재하지 않는 경우, 결과는 첫 번째 요소를 끝으로 잘못 이동합니다. 다음과 같은 이유 때문입니다.array_search()돌아올 것입니다false에 통합될 것입니다.0타고array_splice()(데모).

기본적인 미적분을 구현하고 배열 요소를 한 위치에서 다른 위치로 이동하는 범용 함수를 얻을 수 있습니다.

PHP의 경우 다음과 같습니다.

function magicFunction ($targetArray, $indexFrom, $indexTo) { 
    $targetElement = $targetArray[$indexFrom]; 
    $magicIncrement = ($indexTo - $indexFrom) / abs ($indexTo - $indexFrom); 

    for ($Element = $indexFrom; $Element != $indexTo; $Element += $magicIncrement){ 
        $targetArray[$Element] = $targetArray[$Element + $magicIncrement]; 
    } 

    $targetArray[$indexTo] = $targetElement; 
}

자세한 설명은 "glommatter"에서 "moving array elements"를 확인하십시오.

http://www.gloommatter.com/DDesign/programming/moving-any-array-elements-universal-function.html

언급URL : https://stackoverflow.com/questions/2359652/how-do-i-move-an-array-element-with-a-known-key-to-the-end-of-an-array-in-php

반응형