替换数组值以递增

时间:2018-11-13 20:27:09

标签: php arrays

我有一个像这样的数组...

[0,0,23,0,0,18,0,0]

然后我想将非'0'(23&18)的值更改为自动递增,因此最终结果将是这样,

[0,0,1,0,0,2,0,0]

是否有最好的方法? 到目前为止,这是我所做的,但是结果不如预期...:)

<?php

$arr = [0,0,23,0,0,18,0,0];
$x = 1;
$r = collect($arr)->map(function ($value, $key)use($x) {
    if ($value == 0) {
        return $value;
    } else {
        return $x++;
    }
})->all();

dd($r);

2 个答案:

答案 0 :(得分:3)

问题在于,当您将$x的值通过use传递给函数时,这不允许更新该值。您需要通过reference-use (&$x)传递它,以允许它在函数之外增加值...

$r = collect($arr)->map(function ($value, $key) use (&$x) {

答案 1 :(得分:0)

另一种方法...使用foreach引用数组&

通过引用传递

摘要

$arr = [0,0,23,0,0,18,0,0];
$counter = 1;
foreach ($arr as &$val){
   if($val !== 0){
      $val = $counter++;
   }
}
print_r($arr);

注意:请注意dangling reference


没有参考

摘要

$arr = [0,0,23,0,0,18,0,0];
    $counter = 1;
    foreach ($arr as $key => $val){
       if($val !== 0){
          $arr[$key] = $counter++;
       }
    }
print_r($arr);

输出

Array
(
    [0] => 0
    [1] => 0
    [2] => 1
    [3] => 0
    [4] => 0
    [5] => 2
    [6] => 0
    [7] => 0
)

实时demo
通过引用docs