我有一个包含API的产品数组。
我想扩展它并添加一些值,例如categories
,price
。我在循环时尝试在数组前添加&
以通过引用行使用它。但是当我添加另一个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
类别,但它没有用。
答案 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);