Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сколько раз отработает цикл foreach?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
nkl
Отправлено: 07 Августа, 2013 - 06:22:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Имеется массив вида:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $data[0]['id'], $data[0]['description'];
  3. $data[1]['id'], $data[1]['description'];
  4.  

Интересует следующее: сколько раз будет проходить цикл (приведен ниже), если массив имеет всего одну строку? ($data[0]['id'], $data[0]['description'];)
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($data  as $row):
  3.  
  4. ...
  5. endforeach;
  6.  

Такое ощущение, что он пробегает как минимум 2 раза, а не один. И может это правильно и как быть в таких случаях? Уже есть мысль на этот счет, пробежаться по нему циклом for , вот таким образом:
PHP:
скопировать код в буфер обмена
  1.  
  2. for($i = 0; $i <= count($data); $i++):
  3.  
  4. ...
  5. endfor;
  6.  

Правильно ли это будет?
(Добавление)
Все правильно работает, я не туда смотрел просто, сейчас исправлю и отпишу в чем была проблема...
(Добавление)
Задачка стояла нетривиальная в общем-то.
Из формы приходил вот такой-вот массив:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. ...
  3.             <input type="checkbox" name="documents[0][id]" value="4" >
  4.             <input type="text" name="documents[0][description]">
  5.         </td>
  6.     </tr>
  7.         <tr>
  8.         <td class="right">Сертификат о сдачи государственного тестирования</td>
  9.         <td>
  10.             <input type="checkbox" name="documents[1][id]" value="5" >
  11.             <input type="text" name="documents[1][description]">
  12. ...
  13.  

Потом, нужно было записать этот массив в БД, но записать только те данные, которые отмечены "галочкой".
Вот таким вот кодом:
PHP:
скопировать код в буфер обмена
  1.  
  2. ...
  3.                         foreach ($documents as $row):
  4.                             if(isset($row['id'])):
  5.                                 $contingent_documents_relatioship = DB::insert(
  6.                                         'contingent-document_relationship', array(
  7.                                             'contingent_id',
  8.                                             'document_id',
  9.                                             'document_description'))
  10.                                         ->values(array('contingent_id' => $contingent_last_insert_id,
  11.                                                         'document_id' => $row['id'],
  12.                                                         'document_description' => $row['description']));
  13.                                 $contingent_documents_relatioship->execute();
  14.                             endif;
  15.                         endforeach;
  16. ...
  17.  

И значит, если поставить только одну галочку, ПоХаПе ругался, мол нет такого $row['id']. Покурив и немного пораскинув мозгами, я вдруг вспомнил, что если галочка не поставлена, то данные из <input type="checkbox"> не передаются. Вот туплю-то, а! Сделал проверку и все пошло как по маслу.

(Отредактировано автором: 07 Августа, 2013 - 06:25:41)

 
 Top
re_nat
Отправлено: 07 Августа, 2013 - 08:29:47
Post Id



Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Март 2012  


Помог: 5 раз(а)




Ну, конечно, нету. Если, как я понимаю, массив имеет вид:
PHP:
скопировать код в буфер обмена
  1. $arr = array($data[0]['id'], $data[0]['description']);

то, при
PHP:
скопировать код в буфер обмена
  1. foreach($data  as $row):
  2.  
  3. ...
  4. endforeach;

В $row попадает сначала $data[0]['id'], а на следующей итерации: $data[0]['description']

---------
Как-то я не дочитал Улыбка

(Отредактировано автором: 07 Августа, 2013 - 08:32:40)

 
 Top
DelphinPRO
Отправлено: 07 Августа, 2013 - 16:26:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




если я правильно понял, у вас массив вида

PHP:
скопировать код в буфер обмена
  1. $data = array(
  2.   0 => array( 'id' => null, 'description' => null ),
  3.   1 => array( 'id' => null, 'description' => null )
  4. );


неудивительно, что форич пробегает два раза. И фор будет бегать столько же Улыбка

Вы сделайте var_dump массива и все увидите.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB