【问题标题】:add item in array which loops in foreach loop在 foreach 循环中循环的数组中添加项目
【发布时间】:2015-12-16 09:30:19
【问题描述】:

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

【问题讨论】:

  • 你能在第 4 行之前的第一个循环中 var_dump $newarray 的值吗?
  • 嗨,你能不能显示你的数组的输出
  • 所以,为了确保我理解,您希望将添加到 $subcategorien 的新值放在第一个 foreach 中?
  • @Epodax 是的,这就是我想要的
  • @rahul 添加了输出

标签: php arrays foreach


【解决方案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);

【讨论】:

    【解决方案2】:

    试试这个类似于你的代码:

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

    【讨论】:

      【解决方案3】:

      来自 PHP 手册 array_push() 如果第一个参数不是数组,则会发出警告。这与 $var[] 创建新数组的行为不同。

      如果您使用array_push() 向数组添加一个元素,最好使用$array[] =,因为这样就没有调用函数的开销。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-30
        • 1970-01-01
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多