Я зацикливаюсь на массиве продуктов и для каждой итерации я вызываю функцию 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 на каждой итерации
$new_array = array( $key => $name.'.jpg' )
будет только один предмет, так что вы никогда не достигнете task 3
поскольку foreach ($new_array as ...)
будет выполняться только один раз.
Понятия не имею, что ты намеревался $new_array
чтобы содержать, поэтому я не могу сделать предложение о том, как решить проблему. Ваш сценарий делает именно то, что вы сказали ему делать, просто вы неправильно поняли ваш foreach
вход.
$ counter — это локальная переменная внутри функции, которая создается только внутри функции и будет уничтожена при возврате функции.
Я предлагаю передать счетчик в качестве параметра, а затем вернуть его, что позволит вам сохранить значение
Например, в определении вашей функции:
function theFunction( $id, $name, $key, $counterValue ){
//stuff
return $counterValue;
}
А потом при вызове функции
$counter = theFunction($id, $name, $i, $counter);
Не забудьте установить $ counter = 0; ДО вашего основного (не в функции) цикла foreach