将关联数组索引移动到其他位置的最佳方法是什么

时间:2012-02-23 15:30:32

标签: php arrays

假设我们有以下数组

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

当循环遍历并回显每个值时,它总是首先打印foo,第二个是bar,第三个是baz,第四个是qux。让我们说我想在foo之后显示qux的值。做这个的最好方式是什么。我正在尝试所有不同的用户,uasort,uksort并没有得到我想要的东西。

我看到很多很好的代码用于将索引移动到顶部使用splice而不是什么,但我还没有找到最好的方式来说,如何让这个索引在关联数组中的其他索引之前移动,所以当我们遍历它时,我们会在另一个之前点击我们想要的索引。

3 个答案:

答案 0 :(得分: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'); 

答案 1 :(得分: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
)

答案 2 :(得分:-2)

也许你可以使用这样的东西?

没有所有的PHP - $

function swap(arr, idxFrom, idxTo )
{
   var tmp = arr[idxFrom];
   arr[idxFrom] = arr[idxTo];
   arr[idxTo] = tmp;
}
抱歉,这应该是downvoted:您可以在数组中找到param的索引,然后使用splice。