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 沒有抱怨/警告,它也不會修改密鑰。
- 1 回答
- 0 關注
- 85 瀏覽
添加回答
舉報
0/150
提交
取消