为了账号安全,请及时绑定邮箱和手机立即绑定

array_walk不改变价值

array_walk不改变价值

PHP
汪汪一只猫 2022-09-24 17:20:52
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);输出:echoin walk Lifting Heavy Boxes [12/18/17] (my_form)输出:print_rArray(    [1] => Array        (            [id] => 2            [sid] => 35            [material_completed] => 1            [date] => 2017-12-18        ))我有另一个非常相似的阵列行走,它做得很好。我能察觉到它们之间的唯一区别是正在运行的数组,$d的值在它通过步行之前已经是一个字符串,而在不起作用的那个中,$d一个数组在步行中转换为字符串(成功,但最终不成功)。我错过了什么?这是固定版本:array_walk($complete, function(&$d,$k) use($form) {    $d = values($k, 'name').' ['.date('m/d/y',strtotime($d['date'])).'] ('.$form.')';});无论如何,这就是我想要做的。我没有试图改变钥匙。我错误地认为,要更改值,您必须将键设置为新值。
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

您无法在 array_walk() 的回调中更改数组的键:

只有 的值可能会更改;它的结构不能改变,即程序员不能添加,取消设置或重新排序元素。如果回调不遵守此要求,则此函数的行为是未定义的,并且是不可预知的。array

这在第一条评论中也提到:

array_walk不能用于更改数组中的键,这一点毫无价值。该函数可以定义为 (&$value, $key),但不能定义为 (&$value, &$key)。即使 PHP 没有抱怨/警告,它也不会修改密钥。


查看完整回答
反对 回复 2022-09-24
  • 1 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信