如何在不使用foreach的情况下向多维数组的lessons添加flag元素
给多维数组的lessons子数组批量添加元素(用array_map实现)
原始数组:
$array = [ [ 'id' => 1, 'lessons' => [ [ 'name' => 'PHP', ], [ 'name' => 'Python', ] ] ], [ 'id' => 2, 'lessons' => [ [ 'name' => 'Java', ], [ 'name' => 'Ruby', ] ] ], ];
需求:给每个lessons数组里的子元素都加上flag => true键值对。
你写的代码存在几个问题:
- 回调函数的参数是
$array,但内部却使用未定义的$topics变量 - 直接把
lessons数组和['flag' => true]合并,这只会把flag加到lessons数组本身,而不是每个子元素里
正确的实现方式是用嵌套array_map,外层处理顶层的每个元素,内层处理每个lessons里的子元素:
$csmap_data = array_map(function($item) { // 对当前item的lessons数组做处理,给每个lesson添加flag $item['lessons'] = array_map(function($lesson) { return $lesson + ['flag' => true]; }, $item['lessons']); return $item; }, $array);
执行后得到的结果示例:
[ 'id' => 1, 'lessons' => [ [ 'name' => 'PHP', 'flag' => true ], [ 'name' => 'Python', 'flag' => true ] ] ], [ 'id' => 2, 'lessons' => [ [ 'name' => 'Java', 'flag' => true ], [ 'name' => 'Ruby', 'flag' => true ] ] ]
内容的提问来源于stack exchange,提问作者user15187482
相关产品推荐
相关产品推荐

