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倍。我会选择那个。谢谢