dpvomqeu396484
2015-12-16 09:30
浏览 64
已采纳

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

So I have a foreach loop which loops though an array of items. The checkIfSubCategorie() returns an array with new items.

I want to place all these items in the $subcategorien array. This works good. The problem is that those items don't go through the initial foreach loop. Is this possible and if yes, how?

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);
        }
    }
}

This is the $subcategorien array before the initial foreach loop:

array(2) {
  [0]=> string(3) "701"
  [1]=> string(3) "702"
}

var_dump of $newarray:

array(1) {
  [0]=> string(1) "8"
}
bool(false)

This is the $subcategorien array after the foreach loop:

array(3) {
  [0]=> string(3) "701"
  [1]=> string(3) "702"
  [2]=> string(1) "8"
}

The result should be:

array(3) {
  [0]=> string(3) "701"
  [1]=> string(3) "702"
  [2]=> string(1) "8"
  [3]=> string(1) "9"
}
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • douwang4374 2015-12-16 09:58
    已采纳

    What you are looking for is called recursive function. Something like:

    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);
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • duanliang1999 2015-12-16 09:56

    From PHP Manuals array_push() will raise a warning if the first argument is not an array. This differs from the $var[] behavior where a new array is created.

    If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.

    评论
    解决 无用
    打赏 举报
  • dpb42021 2015-12-16 10:02

    Try this it similar to your code:

     $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;
            }
        }
     }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题