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
Форумы портала PHP.SU :: Версия для печати :: Помогите с условием цикла
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Помогите с условием цикла

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

1. feitosa - 03 Ноября, 2011 - 18:25:42 - перейти к сообщению
Помогите плиз с условием цикла. Вот пример

есть массив


PHP:
скопировать код в буфер обмена
  1. do {
  2. echo next($a);
  3. }
  4. while(пока курсор массива не окажиться в конце)


как правильно задать условие???
2. sKaa - 03 Ноября, 2011 - 18:42:17 - перейти к сообщению
А не проще :
PHP:
скопировать код в буфер обмена
  1. foreach($a as $key => $value){
  2.         echo $value;
  3.         }


---
я могу ошибаться, но :
PHP:
скопировать код в буфер обмена
  1.  
  2.     $a = array('1', '2', '3', '4');
  3. do {
  4.     echo next($a);
  5.     }
  6.     while(pos($a) != count($a));
  7.  
  8.  


прошу прощение )) впервый раз фигню написал, зачем то массив скопировал ))
так будет проще
3. feitosa - 03 Ноября, 2011 - 18:57:24 - перейти к сообщению
а если 2 массива

PHP:
скопировать код в буфер обмена
  1. $a = array('1', '2', '3', '4');
  2.  
  3. $b = array('one', 'two', 'three', 'four');
  4.  
  5. do {
  6. echo next($a);
  7. echo next($b);
  8. }
  9. while(пока курсор массива не окажиться в конце)


как тут использовать foreach ??
4. sKaa - 03 Ноября, 2011 - 19:01:12 - перейти к сообщению
Я поправил своё сообщение вверху, погляди.
do while - в данном случае думаю тоже уместно только если оба массива содержат одинаковое кол-во ключей. т.е

причем в твоем коде выше не выводится самое первое значение массива..
надо как-то так :
PHP:
скопировать код в буфер обмена
  1. $a = array('1', '2', '3', '4');
  2. do {
  3.         if(key($a) == 0) echo current($a);
  4.         echo next($a);
  5.     }
  6.     while(pos($a) != count($a));
  7.  
5. feitosa - 03 Ноября, 2011 - 19:07:00 - перейти к сообщению
чёто у меня от условия

браузер виснет =)
6. sKaa - 03 Ноября, 2011 - 19:11:35 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $a = array('1', '2', '3', '4');
  2. echo count($a).' - count<br>';
  3. $k = 0;
  4. do {
  5.         if($k == 0) echo current($a);
  6.         else echo next($a);
  7.         $k++;
  8.     }
  9.     while($k != count($a));

вот, только что проверил, ничё не виснет.
7. feitosa - 03 Ноября, 2011 - 19:25:39 - перейти к сообщению
блин! показываю что у меня

вот массив $dot1 (print_r)

PHP:
скопировать код в буфер обмена
  1. Array ( [0] => 100 [1] => 190 [2] => 50 [3] => 30 [4] => 130 [5] => 165 )


делае по твоему

PHP:
скопировать код в буфер обмена
  1. $k=0;
  2. do {
  3. if($k == 0) {echo current($dot1);}
  4. echo next($dot1).'|<br>';
  5. $k++;
  6. }
  7. while($k != count($dot1));


вот что мне выводит

PHP:
скопировать код в буфер обмена
  1. 100190|
  2. 50|
  3. 30|
  4. 130|
  5. 165|
  6. |


100 и 190 вмести.... хм.... почему ? и слеш ещё один в конце
8. sKaa - 03 Ноября, 2011 - 19:32:21 - перейти к сообщению
гляди всё просто
у тебя есть переменная "к" в начале она равна 0.
PHP:
скопировать код в буфер обмена
  1. do {
  2. if($k == 0) echo current($dot1); // Условие срабатывает только пока к==0, курсор массива пока мы не использовали функцию next тоже на нуле, а значит мы выводим самый первый елемент массива ( 100 ).. ошибка в том, что нужно делать так : echo current($dot1).'|<br>';
  3. else echo next($dot1).'|<br>'; // Дальше условие срабатывает если к != 0. и курсор каждый раз сдвигается к след. елементу массива
  4. $k++; // тут перменная к каждый раз увеличивается на 1.
  5. }while($k != count($dot1));

вот ошибка :
PHP:
скопировать код в буфер обмена
  1.  
  2. //вместо
  3. if($k == 0) echo current($dot1);
  4. // нужно
  5. if($k == 0) echo current($dot1).'|<br>';
  6.  

(Добавление)
а слеш в конце сорри, это я затупил ...
условие вот так :
PHP:
скопировать код в буфер обмена
  1. while($k  < count($a));

(Добавление)
я сам далеко не гуру))) подсказываю так, как делал бы сам) может великие умы придумают что-то более экзотическое))
9. DeepVarvar - 03 Ноября, 2011 - 19:35:22 - перейти к сообщению
Если массивы не ассоциативные, то так:
PHP:
скопировать код в буфер обмена
  1. $a = array(/* ... */);
  2. $b = array(/* ... */);
  3. for ($i = 0; isset($a[$i]); $i++) {
  4.   echo $a[$i]." - ";
  5.   echo $b[$i]."<br />";
  6.   }

(Добавление)
Сначала подвисли, потом совсем ушли Радость
Если массив один, его вообще вот так (исходя из задачи) вывести можно:
PHP:
скопировать код в буфер обмена
  1. echo implode("|<br />",$a)."|";

 

Powered by ExBB FM 1.0 RC1