我有一个动态数组,例如可以这样:
$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循环,但我无法理解它。
任何帮助表示赞赏,
森
答案 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;
}