所以我有一个foreach
循环,它循环一个项目数组。 checkIfSubCategorie()
返回包含新项的数组。
我想将所有这些项放在$subcategorien
数组中。这很好用。问题是这些项目不会经历最初的foreach循环。这是可能的,如果可以,怎么样?
foreach($subcategorien as $subcat) {
//make array with all subcategorien
$newarray = self::checkIfSubCategorie($subcat);
if(is_array($newarray)) {
foreach($newarray as $a) {
// add item to subcategorien
array_push($subcategorien, $a);
}
}
}
这是$subcategorien
数组之前初始foreach
循环:
array(2) {
[0]=> string(3) "701"
[1]=> string(3) "702"
}
$newarray
的var_dump:
array(1) {
[0]=> string(1) "8"
}
bool(false)
$subcategorien
循环之后的foreach
数组 :
array(3) {
[0]=> string(3) "701"
[1]=> string(3) "702"
[2]=> string(1) "8"
}
结果应为:
array(3) {
[0]=> string(3) "701"
[1]=> string(3) "702"
[2]=> string(1) "8"
[3]=> string(1) "9"
}
答案 0 :(得分:1)
您要找的是recursive function
。类似的东西:
function getCategoryChildren($categoryParentId, $categories = array()) {
// TODO: query to get all the categories by their parents id
while ($row = $stmt->fetch_assoc()) {
$categories[] = $row['category_id'];
$categories = getCategoryChildren($row['category_id'], $categories);
}
return $categories;
}
$allCategories = getCategoryChildren(0);
答案 1 :(得分:0)
从PHP手册array_push()
如果第一个参数不是数组,将发出警告。这与创建新数组的$var[]
行为不同。
如果使用array_push()
向数组添加一个元素,最好使用$array[] =
,因为这样就不会有调用函数的开销。
答案 2 :(得分:0)
尝试此操作类似于您的代码:
$result_array = array();
foreach($subcategorien as $subcat){
//make array with all subcategorien
$newarray = checkIfSubCategorie($subcat);
$result_array[] = $subcat;
if(is_array($newarray)){
foreach($newarray as $a){
$result_array[] = $a;
}
}
}