如何使用array_walk更改元素的值?

领域

如何使用array_walk更改元素

例如,这是我的数组,

$items = array(
    0 => array( 
        "id" => "1",
        "title" => "parent 1",
       "children" => array()
        ),

    1 => array( 
        "id" => "2",
        "title" => "parent 2",
        "children" => array (
           0 => array( 
            "id" => "4",
            "title" => "children 1"
            ),
           1 => array( 
            "id" => "5",
            "title" => "children 2"
            ) 
        ),
   )
);

我可以在下面对此进行更改,

function myfunction(&$item,$key)
{
    if($item['id'] === '1')
    {
        $item['title'] = 'hello world en';
    }   
}


array_walk($items,"myfunction");

print_r($items);

但是我有一个嵌套的孩子,我也想更改其中的值,如果这样做,我会得到错误信息,

function myfunction(&$item,$key)
{
    if($item['id'] === '1')
    {
        $item['title'] = 'hello world en';
    }

    if($item['id'] === '4')
    {
        $item['title'] = 'hello world en';
    }


    foreach($item as $key => $value)
    {

        if(is_array($value))
        {
            myfunction($value,$key);
        }
    }

}

错误,

注意:未定义的索引:第xx行上... index.php中的ID

知道如果数组中有嵌套的子级该怎么办?

阿尔玛

您可以通过递归调用回调函数来实现。我用闭包实现了示例,例如:

//replacement array:
$replace = [
  '1' => 'foo',
  '2' => 'bar',
  '5' => 'baz'
];

array_walk($items, $f=function(&$value, $key) use (&$f, $replace)
{
   if(isset($replace[$value['id']]))
   {
      $value['title'] = $replace[$value['id']];
   }
   if(isset($value['children']))
   {
      //the loop which is failing in question:
      foreach($value['children'] as $k=>&$child)
      {
         $f($child, $k);
      }
      //Proper usage would be - to take advantage of $f
      //array_walk($value['children'], $f);
   }
});

如您所见-您所需要做的就是通过引用传递值,并将其在回调中进行迭代作为引用foreach

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用xmlstarlet,如何更改元素的值

来自分类Dev

如何更改元素的值

来自分类Dev

无法使用react更改元素的值

来自分类Dev

如何使用UIBezierPath更改元素的颜色?

来自分类Dev

如何使用JavaScript更改元素的类?

来自分类Dev

如何使用javascript更改元素的属性?

来自分类Dev

如何使用 React 更改元素的 innerHTML?

来自分类Dev

无法更改元素的值

来自分类Dev

如何在ArrayNode中更改元素值

来自分类Dev

如何通过其属性值更改元素/标签值?

来自分类Dev

如何根据数据属性更改元素值?

来自分类Dev

如何动态更改元素?

来自分类Dev

如何使array_walk与PHP内置函数一起使用?

来自分类Dev

修改值时array_walk无法正常工作

来自分类Dev

使用jQuery onclick时如何更改元素的位置?

来自分类Dev

Xslt:如何使用参数更改元素中的节点文本

来自分类Dev

如何使用angular.js更改元素的颜色

来自分类Dev

如何使用DOM更改元素的href颜色?

来自分类Dev

如何使用JavaScript媒体查询更改元素的类?

来自分类Dev

如何使用动画更改元素CSS的位置

来自分类Dev

使用array_walk的PHP计数问题

来自分类Dev

Javascript:更改元素html的值

来自分类Dev

更改输入元素的值而不更改元素ID

来自分类Dev

如何动态更改元素对齐方式?

来自分类Dev

JavaScript:如何从参数更改元素属性?

来自分类Dev

如何通过jQuery更改元素的颜色?

来自分类Dev

选择后如何更改元素的边框?

来自分类Dev

如何动态更改元素对齐方式?

来自分类Dev

使用Jest更改元素大小