如何在嵌套循环中扩展数组结构?

时间:2015-12-09 13:58:09

标签: php arrays

我有一个包含API的产品数组。

我想扩展它并添加一些值,例如categoriesprice。我在循环时尝试在数组前添加&以通过引用行使用它。但是当我添加另一个while循环来添加categories时,$row并未延长。

$products = array('id_product'=>12,'link'=>'test.html','description'=>'desc'); 
foreach($products as &$row) { 
    $row['price'] = 12;
    $product = new Product($row['id_product'];
    $categories = $product::getCategories();
    $k = 1; 
    while ($cat = current($categories)){
        $row['categoryid'.$k] = $cat['name'];
        $k++; 
    }
}

$product::getCategories()返回

  

array(1){[0] => array(1){[" name"] =>字符串(8)" T恤" }}

问题是永远不会创建包含categoryid.$k的数组键,我尝试使用foreach类别,但它没有用。

2 个答案:

答案 0 :(得分:0)

在foreach循环中提供的示例中,$ row将包含值12,'test.html'和'desc'。所以你不能将它们用作数组。 有效代码:

$products = array();
$products[] = array('id_product'=>12,'link'=>'test.html','description'=>'desc');

你也有无效的while循环,用 array_shift 替换当前函数,或者使用正确的foreach循环

<强>被修改: 使用此代码替换:

if (!empty($categories)) {
    foreach ($categories as $key => $category) {
      $row['categoryid' . $key] = $category['name'];
    }
  }

答案 1 :(得分:0)

我通过添加一个函数并通过值传递行参数

来修复我的问题
private function addCategories(&$row){
     $categories = $this->getProductCategoriesFull((int)$row['id_product']);

            if (!empty($categories)) {
                $k = 2;

                foreach($categories as $category) {
                  if($k!= 2)
                  $row['categoryid' . ($k-1)] = $category['name'];

                  $k++;
                  if($k>5) exit;
                }
            }

}

并在循环中调用它

$this->addCategories($row);