在foreach循环中循环的数组中添加item

时间:2015-12-16 09:30:20

标签: php arrays foreach

所以我有一个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"
}

3 个答案:

答案 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;
        }
    }
 }