2012-02-23 2 views
2

에 연관 배열 인덱스를 이동하는 가장 좋은 방법은 무엇이 통해 반복하고 각각의 값을 울리는 때 우리는 다음과 같은 배열다른 위치

$myArray = array( 
       "foo" => "value1" , 
       "bar" => "value2" , 
       "baz" => "value3" , 
       "qux" => "value4" 
    ); 

을 가지고 말할 수는 항상 먼저 foo는 인쇄 할 것 , 바 두 번째, 바즈 세째, 그리고 네 번째 네 번째. foo 다음에 qux의 값을 보여주고 싶습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까? 나는 다른 모든 위도우, 위스콘신 주점을 시도하고 있었고, 내가 원하는 것을 얻지 못하고 있었다.

스플 라이스를 사용하여 맨 위로 인덱스를 옮기는 데 좋은 코드를 많이 보았지만 연관 배열의 다른 인덱스보다 먼저이 인덱스를 옮기는 방법을 찾지 못했습니다. 그래서 우리가 루프를 통과 할 때 우리는 다른 인덱스보다 먼저 원하는 인덱스를 쳤다.

답변

1

매우 우아하지만 작동하지 :

$arr = array( 
    "foo" => "value1" , 
    "bar" => "value2" , 
    "baz" => "value3" , 
    "qux" => "value4" 
); 

$tmp = array(); 
foreach($arr as $k=>$v) { 
    $tmp[] = array($k=>$v);; 
} 

array_splice($tmp, 1, 0, array_slice($tmp, 3)); 
array_splice($tmp, -1); 
$arr = array(); 
foreach($tmp as $k => $v) { 
    foreach($v as $k2 => $v2) { 
     $arr[$k2] = $v2; 
    } 
} 

print_r($arr); 

출력이 같은

Array 
(
    [foo] => value1 
    [qux] => value4 
    [bar] => value2 
    [baz] => value3 
) 
+0

잘 됐네, 고마워. 내가보기에는 매우 복잡한 해결책처럼 보입니다. 일반적인 상황 일 수 있습니다. 여기에이 작업을 수행하는 방법이 있어야합니다. –

-2

어쩌면 다음과 같은 것을 사용할 수 있습니까? 없이

모든 PHP-을 downvoted 될 자격이 미안 $

function swap(arr, idxFrom, idxTo) 
{ 
    var tmp = arr[idxFrom]; 
    arr[idxFrom] = arr[idxTo]; 
    arr[idxTo] = tmp; 
} 

: 당신이 배열의 PARAM의 인덱스를 찾은 다음 스플 라이스를 사용할 수 있습니다.

+0

이 문제는 두 키의 값을 바꾼 것이 아니라 값과 일치시키기 위해 키가 필요하다는 것입니다. 나는 그것이 어떻게 있는지에 관해서는 술집이 필요하지만 단지 qux 후에옵니다. –

2

뭔가?

function custom_compare($a, $b) { 

    $target = array('foo', 'qux', 'bar', 'baz'); 

    return array_search($b, $target) - array_search($a, $target); 
} 

$myArray = array( 
    "foo" => "value1", 
    "bar" => "value2", 
    "baz" => "value3", 
    "qux" => "value4" 
); 

uksort($myArray, 'custom_compare'); 
+0

그런 종류의 작품이지만, 내가 uksort를 사용하려고 할 때와 같은 문제를 가지고 있습니다. 그것은 모든 순서가 다른 모든 키들을 돌아 다니며 움직이고 싶었던 인덱스는 이제 내가 원하는 인덱스 앞에 있습니다. –

관련 문제