我循环遍历一系列产品,每次迭代我调用一个函数theFunction
$products = array (
//...
//...
);
$count = count($products);
$i = 0;
foreach ($products as $product) {
theFunction($id, $name, $i);
$i++;
if($i == $count){
// complete
}
}
然后在这个函数中我有一些带有计数器的其他循环,我需要区分如果它是循环中的第一个会发生什么。为此,我使用$counter
,如果为1则处理task 2
,否则应始终处理task 3
function theFunction( $id, $name, $key ){
$design = Mage::getModel('catalog/category')->load($id);
$collection = $design->getProductCollection();
foreach ($collection as $p) {
// do task 1...
// if success/exists then proceed...
if(file_exists('new_name.jpg')) {
$product = Mage::getModel('catalog/product')->load($p->getId());
$new_array = array( $key => $name.'.jpg' );
$counter = 1;
foreach($new_array as $label => $img){
if($counter === 1 ){
// do task 2
}else{
// do task 3
}
$counter++;
}
$product->save();
}
}
}
此时计数器始终设置为1且永不增加,因此它始终在每次迭代时处理任务2
答案 0 :(得分:1)
$new_array = array( $key => $name.'.jpg' )
只会有一个项目,因此您永远不会到达task 3
,因为foreach ($new_array as ...)
只会执行一次。
我不知道您想要包含的内容$new_array
,因此我无法就如何解决问题提出建议。您的脚本完全按照您的要求执行,只是您误解了foreach
输入。
答案 1 :(得分:0)
$ counter是函数中的局部变量,仅在函数内创建,并在函数返回时被销毁。
我建议将计数器作为参数传递,然后返回它,允许你保留值
例如在你的函数定义中:
function theFunction( $id, $name, $key, $counterValue ){
//stuff
return $counterValue;
}
然后在调用函数时
$counter = theFunction($id, $name, $i, $counter);
别忘了设置$ counter = 0;在您的主要(不在函数中)foreach循环之前