2017-05-23 63 views
0

我有一個動態數組可能例如看起來就像這樣:如何使數組值連續但保持正確的順序?

$arr = array(42, 30, 70, 10); 

我有一個功能叫做CreateOrder,我希望它返回一個數組這樣

function createOrder($array) 
{ 

    /* 
    This function should return an array starting at 0, 
    while keeping the correct order, like this: 
    */ 

    $new_array = array(2, 1, 3, 0); 

} 

我一直嘗試和嘗試與foreach循環,但我無法讓我的頭在附近。

讚賞任何幫助,

彌敦道

+1

什麼是給出的例子背後的邏輯和輸出 – Exprator

+0

'array_unshift($改編,0)'? – wostex

+0

如果對數組進行排序,您是否需要返回元素的位置? –

回答

1

如果你不介意的原始數組的順序被丟棄的過程:

asort($arr); 
$new_array = array_combine(array_keys($arr), range(0,count($arr)-1)); 
ksort($new_array); 

沒有這麼一個函數裏面壞了,因爲使用原始數組的副本,除非你通過引用傳遞,所以只有在本地的功能範圍的複製順序被損壞時

甚至更​​簡單:

asort($arr); 
$new_array = array_keys($arr); 
asort($new_array); 
$newArr = array_keys($new_array); 
+0

太棒了!第一段代碼有效!第二個返回其他東西!謝謝:-) – Nathan

+0

是啊,我的壞......當我複製/粘貼第二行時,我錯過了幾行,現在編輯它們 –

+0

啊,秒鐘也有效。性能測試和第二次測試的速度是+/- 0.4倍。將選擇一個。謝謝 – Nathan

0
  • 克隆陣列。
  • 按升序對克隆數組進行排序。
  • 對於原始數組中的每個元素,搜索排序數組中的鍵,並將返回的位置插入新數組中。
  • 返回位置數組。

下面的代碼將有助於

function createOrder($array){ 
    $cloneArray = asort($array); 
    $positionArray = []; 

    foreach($cloneArray as $element){ 
     $positionArray[] = array_search($element,$array); 
    } 

    return $positionArray; 
} 
相關問題