【问题标题】:re arrange php associative array重新排列php关联数组
【发布时间】:2013-02-12 12:17:55
【问题描述】:

我有一个数组:

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

【问题讨论】:

  • 你的“任意数组排序”的目的是什么?你只是想随机化订单吗?或者,您是否特别想以参数化方式移动项目?
  • 我想更重要的是我需要按照我想要的方式对它们进行排序,并且不属于任何现成的排序标准,如字母或数字……我需要准确地排序我告诉它进行排序。

标签: php arrays multidimensional-array associative-array


【解决方案1】:

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

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

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

然后,在switch 之后,置换:

array_multisort($permutation, $example);

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

【讨论】:

  • 因为我不使用数字键,排列数组会起作用吗?这似乎是我要采取的路线,因为您绝对正确,因为我确实知道每种情况下我想要的排列。
  • 它与键无关,array_multisort 保留非数字键,所以:是的,它会工作
  • 是的,这就是这样做的方法,再次感谢。花了一点时间来理解排列(有一段时间不必使用它们)但最终这是最简单的方法,因为我知道每种情况的顺序。
【解决方案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...
    }
});

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      3. 为每种情况创建自定义排序函数 (http://www.php.net/manual/en/function.usort.php)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2011-01-28
        • 1970-01-01
        相关资源
        最近更新 更多