如何使数组值连续但保持正确的顺序?

时间:2017-05-23 11:43:28

标签: php arrays dynamic

我有一个动态数组,例如可以这样:

$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循环,但我无法理解它。

任何帮助表示赞赏,

3 个答案:

答案 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);

答案 1 :(得分:0)

也许asort()函数符合您的需求: http://php.net/manual/de/function.asort.php

不要忘记通过引用传递数组,因此必须按原样调用(没有赋值)。

答案 2 :(得分:0)

  • 克隆阵列。
  • 按升序对克隆的数组进行排序。
  • 对于原始数组中的每个元素,搜索已排序数组中的键,并将返回的位置插入新数组中。
  • 返回位置数组。

以下代码将有所帮助

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

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

    return $positionArray; 
}