[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Глюк в for (пропадает третий элемент массива)
Страницы: 1, 2
McLotos
Добрый день.
Имеем массив из трех элементов
$modules=array('m1','m2','m3');
for ($i=0;$i<=count($modules); $i++)
{
$_MOD_INC = DIR_MODULES . $modules[$i] . DIRECTORY_SEPARATOR . $modules[$i] . '.before' . INC_EXTENSION;
if(is_file($_MOD_INC))
{
require $_MOD_INC;
}
}

После работы цикла оказывается что их было 2.
Что я упустил?
Пробовал вариант $i<count и $i<=count
Результат одинаковый

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
Попробовал через foreach, он показывает все 3.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
GET
$modules[0]
$modules[1]
$modules[2]
$modules[3] ?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
McLotos
$modules[0]
$modules[1]
$modules[2]

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
Может быть из-за того что в каком-то другом скрипте в for тоже используется $i в качестве счетчика?
Хотя по идее я же тут его обнуляю
Очень не хочется перечитывать стотыщмильонов строк кода =(

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
GET
$modules=array('m1','m2','m3');
for ($i=0;$i<=count($modules); $i++)
{
if(isset($modules[$i]))echo $i.'. Ok<br>';
else echo $i.'. No<br>';
}

0. Ok
1. Ok
2. Ok
3. No


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
McLotos
GET
Логично. Но почему в моем случае выводится только 2 элемента?
Я так подозреваю что все-таки из-за того что где-то используется $i в качестве счетчика и эти циклы каким-то образом пересекаются. Надо проверить подключаемые файлы, может в каком-то из них тоже есть for($i;...)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
GET
$i=550;
$modules=array('m1','m2','m3');
for ($i=0;$i<=count($modules); $i++)
{
if(isset($modules[$i]))echo $i.'. Ok<br>';
else echo $i.'. No<br>';
}


:)

$i<=count($modules);//

Подозреваю что 1 из 3 элементов не выводится, потому, что файла нет или он по другому называется, может русскую букву поставил в названии?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
McLotos
Нет, как я и думал, оказывается что во втором файле (m2) тоже есть цикл for со счетчиком $i
Вот и получается что когда я тут его require у меня меняется значение счетчика на количество проходов внутри подключенного скрипта, естественно что внешний скрипт думает что проходов получилось больше чем задано.
И как теперь с этим бороться?
Пёс его знает в каком из очередных модулей может всплыть такой прикол.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
twin
Разные переменные для счетчиков задай.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
GET
Цитата
оказывается что во втором файле (m2) тоже есть цикл for со счетчиком $i


Вот она PHP логика, бессердечная она с*ка с ней не поспоришь. smile.gif

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
bestxp
ну а что ты хотел)

все верно работает) используй нормальные названия переменных тогда)
stump
Уже третий человек на форуме у кого php бракованный :D . Задолбали козлы! Подсунут черт знает что на php.net, а потом страдай из-за этого :lol: .

Но хорошо что foreach не глючит! Им тоже можно пользоваться :D

По делу B) :

$modules = ['m1','m2','m3'];
for ( $modules_index=0; $modules_index < count($modules); $modules_index++ )
{
$_MOD_INC = DIR_MODULES . $modules[ $modules_index ] . DIRECTORY_SEPARATOR . $modules[ $modules_index ] . '.before' . INC_EXTENSION;
if(is_file($_MOD_INC))
{
require $_MOD_INC;
}
}


or

$modules = ['m1','m2','m3'];
foreach ( $modules as $module )
{
$_MOD_INC = DIR_MODULES . $module . DIRECTORY_SEPARATOR . $module . '.before' . INC_EXTENSION;
if(is_file($_MOD_INC))
{
require $_MOD_INC;
}
}


Какая здесь необходимость в цикле с параметром?

_____________
Трус не играет в хокей
Hello
Цитата (McLotos @ 25.02.2015 - 10:47)
Что я упустил?

var_dump($modules) приложить
код в первом сообщении кабочий

Скрытый текст

$modules=array('m1','m2','m3');
for ($i=0;$i<=count($modules); $i++)
  {
      $_MOD_INC = $modules[$i] . DIRECTORY_SEPARATOR . $modules[$i] . '.before';
  echo $_MOD_INC, PHP_EOL;
     
  }
/*
m1/m1.before
m2/m2.before
m3/m3.before
/.before
*/


_____________
VPS от 5$, первые 2 месяца - бесплатно.
McLotos
Просто у меня планируется что таких модулей будет много. А букв в буржуйском алфавите всего 26, а писать длинные названия тупо для iterator'а и лень и запутаться можно. =))))

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.