键变量array_walk()内部的键变量没有更改值

问题描述 投票:0回答:1
function values($id,$col)
{
     $vals = [1=>['name'=>'Lifting Heavy Boxes']];
     return $vals[$id][$col];
}
$complete = [1=>["id"=>"2","sid"=>"35","material_completed"=>"1","date"=>"2017-12-18"]];
$form = 'my_form';

array_walk($complete, function(&$d,$k) use($form) {
    $k = values($k, 'name').' ['.date('m/d/y',strtotime($d['date'])).'] ('.$form.')';
    echo 'in walk '.$k."\n";
});
print_r($complete);

输出:

echo

输出:

in walk Lifting Heavy Boxes [12/18/17] (my_form)

我还有另一个非常相似的阵列步行,这很好。我可以感知到的唯一区别在于有效的一个,值$ d已经是一个字符串,在步行之前已经是一个字符串,而在不起作用的符号中,$ d是一个数组,它在内部转换为字符串步行(成功但最终未成功)。 

我想念的东西吗?
这是固定版本:

print_r

那是我试图做的。我不是在更改钥匙。我的印象是,要改变您必须为新值设置钥匙的价值。

您无法更改

Array ( [1] => Array ( [id] => 2 [sid] => 35 [material_completed] => 1 [date] => 2017-12-18 ) )

php arrays array-walk
1个回答
3
投票

可能会更改array_walk($complete, function(&$d,$k) use($form) { $d = values($k, 'name').' ['.date('m/d/y',strtotime($d['date'])).'] ('.$form.')'; });

的值;它的结构无法更改,即程序员无法添加,删除或重新排序元素。如果回调不尊重此要求,则此功能的行为是不确定的,并且无法预测。
在第一个评论中也提到了这一点:

Array_walk不能用来更改数组中的键,这是什么值得的。 该函数可以定义为(&$ value,$键),但不是(&$ value,&$ key)。 即使PHP不抱怨/警告,也不会修改钥匙。

	

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.