счетчик для каждого цикла не обновляется

Я зацикливаюсь на массиве продуктов и для каждой итерации я вызываю функцию 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

Решение

$new_array = array( $key => $name.'.jpg' ) будет только один предмет, так что вы никогда не достигнете task 3 поскольку foreach ($new_array as ...) будет выполняться только один раз.

Понятия не имею, что ты намеревался $new_array чтобы содержать, поэтому я не могу сделать предложение о том, как решить проблему. Ваш сценарий делает именно то, что вы сказали ему делать, просто вы неправильно поняли ваш foreach вход.

1

Другие решения

$ counter — это локальная переменная внутри функции, которая создается только внутри функции и будет уничтожена при возврате функции.

Я предлагаю передать счетчик в качестве параметра, а затем вернуть его, что позволит вам сохранить значение

Например, в определении вашей функции:

function theFunction( $id, $name, $key, $counterValue ){
//stuff
return $counterValue;
}

А потом при вызове функции

$counter = theFunction($id, $name, $i, $counter);

Не забудьте установить $ counter = 0; ДО вашего основного (не в функции) цикла foreach

0