$a = array(0=>'a',1=>'b',2=>'c', 3=>'d');
我想改变为了3,2,0,1
:如何更改数组的顺序?
$a = array(3=>'d',2=>'c',0=>'a', 1=>'b');
$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 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)
但就像我在评论中所说的,如果你不告诉我们这个排列规则的方式或者是mor具体关于您的需求,我们无法帮助您超越此。
用下面的'uasort()'检查我的答案。 – maciek 2016-06-01 14:36:20
由于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";
}
有没有另一种方法比迭代? – user198729 2010-02-01 08:38:59
你究竟想要做什么?因为除了按特定顺序枚举集合之外,我无法看到为什么要更改数组中元素的“顺序”的另一个原因。 – 2010-02-01 08:46:43
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)
这确实非常好。谢谢。 – 2016-03-25 16:51:17
与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]
你的意思是这样的[array_reverse](http://php.net/manual/en/function.array-reverse.php)? – 2012-08-01 01:54:15
请用下面的'uksort()'检查我的答案。 – maciek 2016-06-02 08:44:25