Đó là bởi vì bạn vẫn có các danh mục trong mảng khi bạn đã chỉ định chúng. Những gì bạn có thể làm là thực hiện hàm trong đó bạn truyền đối số làm tham chiếu và trong vòng lặp foreach để có khả năng xóa mảng khỏi danh mục đã được gán đó. Cách thực hiện đơn giản bên dưới.
function getChildren(&$rows, $p = 0) {
$r = array();
foreach($rows as $row_id => $row) {
if ($row['parent_node']==$p) {
$r[$row['product_category_code']] = getChildren($rows, $row['product_category_code']);
unset($rows[$row_id]);
}
}
return $r;
}