我有一个像这样的数组...
[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);
答案 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
)