To change a recursive code to a non-recursive form
function delrecursive ($id, $class _arr)
{
if ($id = = "") $id = 0;
for ($i =0; $i
<>
if ($class _arr[$i][3]== $id) {
$subid = $class _arr[$i][0];
$this->db->delete (' Tree ', array (' id ' = $id));
$this->db->delete (' Tree ', array (' id ' = $subid));
Delrecursive ($subid, $class _arr);
}
}
}
------Solution--------------------
How does not know with the person convenient, with oneself convenient reason?
Eliminating recursion is to use your own stack instead of the system's stack
$ar = Array (
Array ("1", "0", "top Class 1", "0", "1"),
Array ("713", "0", "Top Class 2", "0", "1"),
Array ("716", "0", "sub-Category 1", "713", "1"),
Array ("718", "0", "Top Class 3", "0", "1"),
Array ("721", "0", "Level two sub-category 1", "716", "1"),
);
$id = 713;
Delrecursive ($id, $ar);
Func ($id, $ar);
function func ($id, $class _arr)
{
if ($id = = "") $id = 0;
$st = Array ($id);
do {
$cnt = count ($st);
for ($i =0; $i
<>
if (In_array ($id = $class _arr[$i][3], $st)) {
$subid = $class _arr[$i][0];
if (! In_array ($subid, $st)) {
$st [] = $subid;
echo "$id, $subid \ n";
$this->db->delete (' Tree ', array (' id ' = $id));
$this->db->delete (' Tree ', array (' id ' = $subid));
Delrecursive ($subid, $class _arr);
}
}
}
}while ($cnt < count ($st));
}
function delrecursive ($id, $class _arr)
{
if ($id = = "") $id = 0;
for ($i =0; $i
<>
if ($class _arr[$i][3]== $id) {
$subid = $class _arr[$i][0];
$this->db->delete (' Tree ', array (' id ' = $id));
$this->db->delete (' Tree ', array (' id ' = $subid));
echo "$id, $subid \ n";
Delrecursive ($subid, $class _arr);
}
}
}
------Solution--------------------
$st = Array ($id);
do {
$cnt = count ($st);
for ($i =0; $i
if (In_array ($class _arr[$i][3], $st)) {
$subid = $class _arr[$i][0];
if (!in_array ($subid, $st)) {
$st [] = $subid;
$this->db_mt->delete (' Tree ', array (' id ' = $id));
$this->db_mt->delete (' Tree ', array (' id ' = $subid));
}
}
}
}while ($cnt < count ($st)) ;