Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使数组值连续但保持正确的顺序?_Php_Arrays_Dynamic - Fatal编程技术网

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

Php 如何使数组值连续但保持正确的顺序?,php,arrays,dynamic,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_arr

我有一个动态数组,例如,它可能如下所示:

$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循环,但我无法控制它

感谢您的帮助

Nathan

也许asort()函数会满足您的需要:


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

如果您不介意原始数组在过程中被丢弃的顺序:

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);
  • 克隆阵列
  • 按升序对克隆的数组进行排序
  • 对于原始数组中的每个元素,在排序数组中搜索键,并在新数组中插入返回的位置
  • 返回位置数组
下面的代码将有所帮助

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

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

    return $positionArray; 
}

给定示例和输出
array\u unshift($arr,0)
背后的逻辑是什么?如果数组已排序,是否需要返回元素的位置?因此,您希望更改顺序,但同时保留顺序,这没有意义。你想从
0
开始,但是你的例子不是从
0
开始@DanFromGermany抱歉,如果我不够清楚,我的意思是连续的,以0-x的方式,没有遗漏数字。(例如3-5-4-1-0-2,而不是42-30-70-28-12)所以基本上我想得到原始数组中数字位置的数组。马克·贝克回答了我的问题,因为我需要很棒的!第一段代码有效!第二个返回的是其他东西!谢谢:-)是的,我的错。。。。我在复制/粘贴第二行时漏掉了几行,在nowAh中编辑它们,第二行也可以。进行了性能测试,第二次测试速度提高了+/-0.4倍。我会选择那个。谢谢