Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数组中添加在foreach循环中循环的项_Php_Arrays_Foreach - Fatal编程技术网

Php 在数组中添加在foreach循环中循环的项

Php 在数组中添加在foreach循环中循环的项,php,arrays,foreach,Php,Arrays,Foreach,所以我有一个foreach循环,它在一个项目数组中循环。checkIfSubCategorie()返回一个包含新项的数组 我想将所有这些项目都放在$subcategorien数组中。这很有效。问题是,这些项没有经过最初的foreach循环。这是否可能?如果可能,如何实现 foreach($subcategorien as $subcat) { //make array with all subcategorien $newarray = self::checkIfSubCate

所以我有一个
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);
        }
    }
}
这是初始
foreach
循环之前的
$subcategorien
数组

array(2) {
  [0]=> string(3) "701"
  [1]=> string(3) "702"
}
array(3) {
  [0]=> string(3) "701"
  [1]=> string(3) "702"
  [2]=> string(1) "8"
}
$newarray
的变量转储:

array(1) {
  [0]=> string(1) "8"
}
bool(false)
这是
foreach
循环之后的
$subcategorien
数组

array(2) {
  [0]=> string(3) "701"
  [1]=> string(3) "702"
}
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"
}

从PHP手册
array\u push()
将在第一个参数不是数组时发出警告。这与创建新数组时的
$var[]
行为不同


如果使用
array\u push()
将一个元素添加到数组中,最好使用
$array[]=
,因为这样调用函数就没有开销。

您要找的是调用
递归函数。比如:

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

请尝试与您的代码类似的方法:

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

在第4行之前,你能在第一个循环中转储$newarray的值吗?嗨,你能显示你数组的输出吗?所以,为了确保我理解,你想在第一个foreach中删除添加到$subcategorien的新值吗?@Epodax是的,这就是我想要的want@rahul增加了输出