останавливается цикл for

12
manaz
На сайте с 13.12.2013
Offline
61
807

Подскажите из за чего может останавливаться цикл for

Вод мой цикл:



<?php

//считается количество ссылок и выводит массивы по счету
echo count($link);

$total = count($link);





for ($i = 0;$i < $total;$i++ )
{
echo $silka;
}

выводит только 2 ссылки хотя их 5

Заметил последнее время что этот цикл for часто ведет себя не предсказуемо...То больше выводит чем имеется в массиве, теперь ссылок в массиве 5 но выводит только 2.

Как можно выявить ошибку?

SS
На сайте с 14.04.2006
Offline
110
#1

Покажите больше кода.

Ответ на ваш вопрос, глядя на текущий код можно дать такой: условие $i < $total перестает выполняться и цикл for заверщается.

manaz
На сайте с 13.12.2013
Offline
61
#2

вот как выглядит

5

Hong Kong Goldway

105.99

Hong Kong Goldway

99.99

число пять это - $total = count($link);

SS
На сайте с 14.04.2006
Offline
110
#3

Добавьте перед циклом строку

print_r($link);

и результат сюда.

Непонятно что там находится.

manaz
На сайте с 13.12.2013
Offline
61
#4

Выложу весь код

Это пишу парсер алиекспресс

Запускаю в цикле

в переменной $link сейчас 5 ссылок в массиве, счетчик считает верно, но в цикле выводятся только два продавца и две первые цены, именно те что в массиве 0 и 1 остальных нет...




$pl ="http://pl.";


echo count($link);

$total = count($link);


$pl ="http://pl.";


for ($i = 0;$i < $total;$i++ ):



$ch = curl_init($pl.$link[$i]);




// Параметры курла
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.62 (Windows NT 6.0; U; ru) Presto/2.1.1');
curl_setopt($ch, CURLOPT_HEADER, 0);
// Следующая опция необходима для того, чтобы функция curl_exec() возвращала значение а не выводила содержимое переменной на экран
curl_setopt($ch, CURLOPT_RETURNTRANSFER, '1');

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
// Получаем html
$text = curl_exec($ch);

// Отключаемся
//curl_close($ch);


// Находим и сохраняем нужный фрагмент
preg_match( '/<span class="shop-name"><i>(.*?)<\/span>/is' , $text , $prod );

$str = $prod[$i];


$str = preg_replace("#[^\.]*\.#s",'',$str, 1);

$str = preg_replace("#[^\:]*\:#s",'',$str, 1);
$shopers1 = $str;
$shopers = strip_tags($shopers1);

echo $shopers;
echo "<br>";




// Находим и сохраняем нужный фрагмент
preg_match( '/<span id="j-sku-price" class="p-price">(.*?)<\/span>/is' , $text , $price );

echo "<br>";

$pric = $price[$i];
echo strip_tags($pric);



echo "<br>";






}



U
На сайте с 09.04.2015
Offline
28
#5

а переменная silka где-то должна меняться? Это же вывод переменной, а не элемента массива

<?php

$total=sizeof($link);
echo $total;
for ($i=0;$i<$total;$i++) echo $link[$i];
Если $link - не одномерный массив, то как-то так:
for ($i=0;$i<$total;$i++) echo $link[$i]['silka'];
manaz
На сайте с 13.12.2013
Offline
61
#6


print_r($link);
for ($i = 0;$i < $total;$i++ ){


Array ( [0] => aliexpress.com/store/product/Original-Xiaomi-Redmi-3-Metal-Body-Mobile-Phone-16GB-ROM-Snapdragon-616-Octa-Core-5-0/311331_32593665671.html [1] => aliexpress.com/store/product/Original-Meizu-M3-Mini-4G-LTE-Cell-Phone-Android-5-1-MT6750-Octa-Core-5-0/311331_32659346800.html [2] => aliexpress.com/store/product/Original-Xiaomi-Mipad-MI-Pad-2-Intel-Atom-X5-Full-Metal-Body-Tablet-PC-7-9/103919_32550276647.html [3] => aliexpress.com/store/product/Original-Meizu-U20-Meilan-Mobile-Phone-3GB-RAM-32GB-ROM-5-5-FHD-1080P-MTK-Helio/311331_32724593890.html [4] => aliexpress.com/store/product/Original-Xiaomi-Redmi-3S-Mobile-Phone-4100mAh-Battery-Fingerprint-ID-Snapdragon-430-Octa-Core-2GB-RAM/805191_32683030676.html )



---------- Добавлено 12.09.2016 в 19:31 ----------

umercomp:
а переменная silka где-то должна меняться? Это же вывод переменной, а не элемента массива
[

silka - это я для примера вывел, ее там в моем коде вообще нет.Нужно было сразу весь код в студию выложить...сори.

TF-Studio
На сайте с 17.08.2010
Offline
334
#7

используйте pastebin для ваших файлов/скриптов и то, что выводится.

дайте лучше сразу весь файл, гадания ваши с заменой инфы не несут ничего хорошего

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
manaz
На сайте с 13.12.2013
Offline
61
#8
TF-Studio:
используйте pastebin для ваших файлов/скриптов и то, что выводится.
дайте лучше сразу весь файл, гадания ваши с заменой инфы не несут ничего хорошего

Не совсем пойму к чему он pastebin?

В скрипте нет не чего чтоб вылаживать на pastebin его.

Прикрепил скрипт.

zip default.zip
tommy-gung
На сайте с 22.11.2006
Offline
304
#9
manaz:
Не совсем пойму к чему он pastebin?

к тому, что проще открыть ссылку во вкладке, чем скачивать\открывать архив, и потом еще файл

Здесь не могла быть ваша реклама
L
На сайте с 07.12.2007
Offline
351
#10
manaz:
в цикле выводятся только два продавца и две первые цены, именно те что в массиве 0 и 1 остальных нет...

Всё правильно. Регулярка

preg_match( '/<span class="shop-name"><i>(.*?)<\/span>/is' , $text , $prod);

вернёт массив с элементами $prod[0](совпадение со всем шаблоном) и $prod[1](совпадение с (.*?) в шаблоне)

А вы пытаетесь выгребать из него по индексу $i:

$str = $prod[$i];

как только $i становится > 1 - таких элементов $prod[$i] не существует.

Посмотрите логи - там сыпется эта ошибка.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий