$id=12;
$arr=[1,2];
array_walk($arr,function($value,$key) use($id){
$arr[$key]['group_id']=$value;
$arr[$key]['mid']=$id;
});将$arr转换为下面形式
//[
//    0=>['group_id'=>1,'mid'=>12],
//    1=>['group_id'=>2,'mid'=>12];
//]
为啥我上面的代码没有生效,哪块出问题了?

解决方案 »

  1.   

    $id=12;
    $arr=[1,2];
    array_walk($arr,function(&$value,$key) use($id){
      $value = ['group_id' => $value, 'mid' => $id];
    });
    print_r($arr);
    Array
    (
        [0] => Array
            (
                [group_id] => 1
                [mid] => 12
            )    [1] => Array
            (
                [group_id] => 2
                [mid] => 12
            ))
      

  2.   

    楼上正解,你也可以用global $arr取得数组,还有本人小白,后面的use()什么意思?
      

  3.   

    因为1楼使用了闭包的方式,在闭包里不能调用所在代码块的上下文变量,就需要使用use关键将对应变量引入,然后才能使用
      

  4.   

    use 中文释义:使用
    function(...) use($External) 是 php 的闭包定义形式,没有为什么,记着就行
    他表示函数体内可以使用的额外的数据(因为回调函数的参数都是预先定义好的)
    有点类似 global $arr,但 global $arr 要求 $arr 是全局变量,而 use($External) 没这个要求