如何从父子数组创建单个 id 数组

How to create single array of id's from parent and child array

我正在尝试创建单个数组,其中包含来自数据库的所有父项和子项的 ID。 但我得到的只是单个数据。

我的理想输出是:

array('160', '161', '162', '163', '164');

我得到的只是

array('160');

这是我到目前为止所做的。

public function arrayId(array $elements) {
    $where_in = array();
    foreach($elements as $element){
        if($element->isArray) {
            $elems = $this->my_model->select_where('tbl_policies', array('parent_id' => $element->id));
            $this->arrayId($elems);
        }
        $where_in[] = $element->id;
   }
   return $where_in;
}
$id = 160; //for instance
$elements = $this->my_model->select_where('tbl_policies', array('id' => $id));
$where_in = $this->arrayId($elements);
                    
die(print_r($where_in));

以及我在这里获取的数据: tbl_policies

构造问题对我来说有点困难。所以如果有什么不清楚的地方,请在下面发表评论,我会尽力让它更容易理解。提前致谢。

我知道,您想删除一个 parent 及其所有 children 和 grandchildren。但是你不是直接和顺序地这样做,而是想收集要删除的记录的所有 ID。您应该执行以下步骤:

  1. Parent-Id(示例 160)是已知的。将此添加到您的列表中。
  2. 写一个递归函数,比如getChildrenIds(parentId).
  3. 在此函数中,您应该遍历 children。如果 child 具有标志“isArray”(根据您的应用程序逻辑),那么您应该调用 getChildrenIds(currentChildId)

我写了下面的函数。应该可以。

    public function getChildrenIds( int $parentId, array &$idList) {

    $idList[] = $parentId;
    $records = $this->my_model->select_where('tbl_policies', array('parent_id' => $parentId));
    foreach($records as $r){
        if($r->isArray)
            $this->getChildrenIds($r->id, $idList);
        else
            $idList[] = $r->id;
    }
    return;
}

public function CollectIds(){   
    $id = 160; //for instance
    $where_in = array();     
    $this->getChildrenIds($id, $where_in);
}

请注意,$where_in 通过引用传递给递归函数 getChildrenIds() 并在那里填充。