如何从父子数组创建单个 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。您应该执行以下步骤:
- Parent-Id(示例 160)是已知的。将此添加到您的列表中。
- 写一个递归函数,比如getChildrenIds(parentId).
- 在此函数中,您应该遍历 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() 并在那里填充。
我正在尝试创建单个数组,其中包含来自数据库的所有父项和子项的 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。您应该执行以下步骤:
- Parent-Id(示例 160)是已知的。将此添加到您的列表中。
- 写一个递归函数,比如getChildrenIds(parentId).
- 在此函数中,您应该遍历 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() 并在那里填充。