重新安排php关联数组

时间:2013-02-26 21:17:03

标签: php arrays multidimensional-array associative-array

我有一个数组:

$example = array();

$example ['one']   = array('first' => 'blue',
                           'second' => 'red');

$example ['two']   = array('third' => 'purple',
                           'fourth' => 'green');

$example ['three'] = array('fifth' => 'orange',
                           'sixth' => 'white');

根据函数的一些输入,我需要在foreach循环处理输出之前更改示例数组的顺序:

switch($type)

case 'a':
//arrange the example array as one, two three
break;

case 'b':
//arrange the example array as two, one, three
break;

case 'c':
//arrange the example array in some other arbitrary manner
break;

foreach($example as $value){
        echo $value;
}

有没有一种简单的方法可以在不重新设计我的所有代码的情况下执行此操作?我有一个非常深入的foreach循环来执行处理,如果有一个简单的方法来简单地重新排序数组,每次真正有用。

4 个答案:

答案 0 :(得分:2)

你不会在这里找到一个银弹答案。您可能需要编写自己的函数以用于uksort()

uksort($example, function ($a, $b) use $type {
    switch($type) {
        case 'a':
            if ($a === 'one' || $b === 'three') return 1;
            if ($a === 'three' || $b === 'one') return -1;
            if ($a === 'two' && $b === 'three') return 1;
            return -1;
            break;
        // and so on...
    }
});

答案 1 :(得分:2)

您可以使用array_multisort进行排列。我假设您知道排列,并且不需要从密钥名称派生它。比如,您想要订单two, three, one,然后创建一个参考数组,就像这样:

$permutation = array(3, 1, 2);

含义:第一项转到第3项,第二项转到第1项,第三项转到第2位

然后,在switch后,置换:

array_multisort($permutation, $example);

这将对$permutation数组进行排序,并将相同的顺序应用于$example

答案 2 :(得分:0)

您需要为每个案例编写自定义排序函数,然后使用usort。第一种情况可以使用排序。任意排序需要是您定义的逻辑。

答案 3 :(得分:0)

我看到了解决这个问题的更多方法,但我不知道更多关于我不知道什么更好的方法。

  1. 进行预分(为每个元素创建一个数值,在“非常深入的foreach循环”中计算),然后使用它作为主要和单一标准对数组进行排序。

  2. 如果您的条件仅基于数字字段,则ASC / DESC使用http://php.net/manual/en/function.array-multisort.php

  3. 为每个案例(http://www.php.net/manual/en/function.usort.php

  4. 制作自定义排序功能