【问题标题】:php shift in a hierarchy array层次数组中的php移位
【发布时间】:2010-10-29 12:39:27
【问题描述】:

我有下一个数组:

Array(
   [id] => 1
   [children] => Array(
      [2] => Array(
         [id] => 2
         [inactive] => true
         [children] => Array(
            [4] => Array(
               [id] => 4
               [children] => Array()
            )
         )
      )
      [3] => array(
         [id] => 3
         [children] => Array(
            [5] => Array(
               [id] => 5
               [inactive] => true
               [children] => Array()
            )
         )
      )
   )
)

我需要从这个数组中删除 [inactive] = true 的元素。但我的问题在下。我应该移动数组元素。 输出应该是:

Array(
   [id] => 1
   [children] => Array(
      [4] => Array(
         [id] => 4
         [children] => Array()
      )
      [3] => array(
         [id] => 3
         [children] => Array(
         )
      )
   )
)

这是我的职责。但它会删除数组元素及其所有子元素。

public function deleteInactive($userTree)
{
    if (!empty($userTree)) {
        foreach($userTree['children'] as $userId => &$user) {
            if (array_key_exists('inactive', $user)) {
                $userTree['children'] += $user['children'];
                unset($userTree['children'][$userId]);
                $this->deleteInactive($userTree);
                break;
            }
            $this->deleteInactive($user);
        }
    }
    return $userTree;
}

你能帮我修改一下这个功能吗?

非常感谢。

【问题讨论】:

    标签: php arrays function multidimensional-array


    【解决方案1】:

    试试这个功能,它应该按照你的要求做。

    <?php
    function deleteInactive($children) {
        $copy = $children;
        foreach ($copy as $key => $child) {
            if (!empty($child['inactive']) && $child['inactive'] === true) {
                unset($children[$key]);
                $children = deleteInactive($child['children']);
            } elseif (!empty($child['children']) && is_array($child['children'])) {
                $children[$key]['children'] = deleteInactive($child['children']);
            }
        }
        return $children;
    } ?>
    

    您的 FIRST 数组也必须是有效的子数组,您可以像这样针对您列出的数组调用它。

    deleteInactive(array('1' => $array));
    

    【讨论】:

      【解决方案2】:

      在取消设置节点之前,您需要将子节点附加到节点的父节点。这不会发生(代码只是取消设置),所以孩子们迷路了。

      【讨论】:

      • 谢谢。查看我编辑的函数。但这行不通。它是删除第一个元素,并附加孩子。但它只使用第一个非活动元素。
      猜你喜欢
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2013-11-05
      • 2013-01-22
      • 1970-01-01
      • 2020-06-12
      • 2013-10-08
      相关资源
      最近更新 更多