【问题标题】:How to change orders of array?如何更改数组的顺序?
【发布时间】:2010-02-01 08:03:43
【问题描述】:
$a = array(0=>'a',1=>'b',2=>'c', 3=>'d');

我想把顺序改成3,2,0,1

$a = array(3=>'d',2=>'c',0=>'a', 1=>'b');

【问题讨论】:

  • 你的意思是这样的array_reverse
  • 请在下方uksort()查看我的回答。

标签: php arrays sorting


【解决方案1】:

如果您想以编程方式更改顺序,请查看各种array sorting functions in PHP,尤其是

  • uasort()— 使用用户定义的比较函数对数组进行排序并保持索引关联
  • uksort()— 使用用户定义的比较函数按键对数组进行排序
  • usort()— 使用用户定义的比较函数按值对数组进行排序

基于下面的Yannicks example,您可以这样做:

$a = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd');
$b = array(3, 2, 0, 1); // rule indicating new key order
$c = array();
foreach($b as $index) {
    $c[$index] = $a[$index];
}
print_r($c);

会给

Array([3] => d [2] => c [0] => a [1] => b)

但正如我在 cmets 中所说,如果您不告诉我们订购数组的规则或更具体地说明您的需求,我们将无法为您提供除此之外的帮助。

【讨论】:

  • 用下面的uasort()检查我的答案。
【解决方案2】:

由于 PHP 中的数组实际上是有序映射,我不确定枚举时是否保留了项目的顺序。

如果您只是想按特定顺序枚举它们:

$a = array(0=>'a',1=>'b',2=>'c', 3=>'d');
$order = array(3, 2, 0, 1);

foreach ($order as $index)
{
  echo "$index => " . $a[$index] . "\n";
}

【讨论】:

  • 除了迭代还有其他方法吗?
  • 你到底想做什么?因为除了按特定顺序枚举集合之外,我看不出改变数组中元素“顺序”的另一个原因。
【解决方案3】:
function reorder_array(&$array, $new_order) {
  $inverted = array_flip($new_order);
  uksort($array, function($a, $b) use ($inverted) {
    return $inverted[$a] > $inverted[$b];
  });
}

$a = array(0=>'a',1=>'b',2=>'c', 3=>'d');
reorder_array($a, array(3, 2, 0, 1));

var_dump($a);

结果:

Array ( [3] => d [2] => c [0] => a [1] => b )

【讨论】:

  • 这确实很好。谢谢。
【解决方案4】:

uksort()做最简单的方法,更实用的方法:

$a = ['a','b','c','d'];
$order = [3, 2, 0, 1];

uksort($a, function($x, $y) use ($order) {
    return array_search($x, $order) > array_search($y, $order);
});

print_r($a); // [3 → d, 2 → c, 0 → a, 1 → b]

【讨论】:

    【解决方案5】:

    更通用的方法:

    $ex_count = count($ex_names_rev_order);
    $j = 0;
    $ex_good_order = array();
    for ($i=($ex_count - 1); $i >= 0 ; $i--) { 
    
        $ex_good_order[$j] = $ex_names_rev_order[$i];
        $j++;
    }
    

    【讨论】:

      【解决方案6】:

      方法如下

      krsort($a);
      

      【讨论】:

      • 他不想颠倒顺序。是3,2,0,1 不是3,2,1,0
      猜你喜欢
      • 2016-12-05
      • 2012-05-27
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多