代码之家  ›  专栏  ›  技术社区  ›  Works for a Living

数组漫游不更改值

  •  0
  • Works for a Living  · 技术社区  · 5 年前
    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)

    这个 print_r 输出:

    Array
    (
        [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 回复  |  直到 5 年前
        1
  •  2
  •   Progman    5 年前

    不能在的回调中更改数组的键 array_walk() :

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

    这在 first comment :

    如果不能使用array-walk来更改数组中的键,那就没什么价值了。 函数可以定义为(&$value,$key),但不能定义为(&$value,&$key)。 即使PHP没有抱怨/警告,它也不会修改密钥。

    推荐文章