2010-02-01 108 views
3
$a = array(0=>'a',1=>'b',2=>'c', 3=>'d'); 

我想改變爲了3,2,0,1如何更改數組的順序?

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

你的意思是這樣的[array_reverse](http://php.net/manual/en/function.array-reverse.php)? – 2012-08-01 01:54:15

+0

請用下面的'uksort()'檢查我的答案。 – maciek 2016-06-02 08:44:25

回答

15

如果你想以編程方式更改順序,看看各種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具體關於您的需求,我們無法幫助您超越此。

+0

用下面的'uasort()'檢查我的答案。 – maciek 2016-06-01 14:36:20

-3

這裏是

krsort($a); 
+1

他不想扭轉順序。它是'3,2,0,1''而不是'3,2,1,0' – Gordon 2010-02-01 08:22:15

7

由於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"; 
} 
+0

有沒有另一種方法比迭代? – user198729 2010-02-01 08:38:59

+5

你究竟想要做什麼?因爲除了按特定順序枚舉集合之外,我無法看到爲什麼要更改數組中元素的「順序」的另一個原因。 – 2010-02-01 08:46:43

5
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) 
+1

這確實非常好。謝謝。 – 2016-03-25 16:51:17

0

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]