重新排列php关联数组

重新排列php关联数组,php,arrays,multidimensional-array,associative-array,Php,Arrays,Multidimensional Array,Associative Array,我有一个数组: $example = array(); $example ['one'] = array('first' => 'blue', 'second' => 'red'); $example ['two'] = array('third' => 'purple', 'fourth' => 'green'); $example ['three'

我有一个数组:

$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循环来进行处理,如果有一种简单的方法每次都对数组重新排序,那将非常有用。

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

您在这里找不到银弹答案。您可能需要编写自己的函数,以便与
uksort()
一起使用


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

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

  • 如果您的标准仅基于数字字段,则ASC/DESC使用

  • 为每个案例创建自定义排序功能()

  • 你可以使用你的排列。我假设您知道排列,不需要从键名派生它。比如说,您需要顺序
    2,3,1
    ,然后创建一个参考数组,如下所示:

    $permutation = array(3, 1, 2);
    
    意思:第一个项目到位置3,第二个项目到位置1,第三个项目到位置2

    然后,在
    开关之后,排列:

    array_multisort($permutation, $example);
    

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

    您的“任意数组排序”的目的是什么?您只是尝试随机排列顺序吗?或您是否特别希望以参数化方式移动项目?我想重点在于我需要按照我想要的方式对它们进行排序,而这不属于任何现成的排序标准,如字母或数字…我需要按照我告诉它的方式对其进行精确排序。因为我不使用数字键排列数组工作?这似乎是我要走的路线,因为你是绝对正确的,因为我确实知道每种情况下我想要的排列方式。它与键无关,array_multisort保留非数字键,因此:是的,它会起作用的。是的,这是这样做的,再次感谢。我花了一点时间来思考排列(有一段时间没有使用它们了),但最终这是最简单的方法,因为我知道每种情况的顺序。
    array_multisort($permutation, $example);