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 :: Двумерный массив

 PHP.SU

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


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

> Без описания
kilogram
Отправлено: 29 Апреля, 2012 - 21:40:53
Post Id


Частый гость


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


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




Не получается вывести двумерный массив. Читал вроде в учебнике что циклы могут не обязательно одинаковой длины строки и стобцы быть, вот попробовал написать код, чего-то не срабатывает.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $trans = array(
  4.  0=> array("Мама","Папа","Дядя",),
  5.  1 => -3,
  6.  2 => 105,
  7.  3=>500,
  8.  4=>'Andrey',
  9.  8=> array("Вася","Петя","Коля")
  10. );
  11.  
  12.  
  13. foreach($trans as $x)
  14. foreach($x as $y)
  15.         echo $x.' '.$y.' ';
  16.                
  17. ?>
  18.  
 
 Top
avtor.fox
Отправлено: 29 Апреля, 2012 - 21:44:53
Post Id



Постоянный участник


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


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




if(is_array($x)){
foreach($x .........) {}
}
 
 Top
LIME
Отправлено: 29 Апреля, 2012 - 21:47:37
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




потому что не все эленты внешнего массива являются тоже массивами
а вы пытаетесь каждый в foreach засунуть
отсюда и ошибка в цикле
формируется массив без ошибок
 
 Top
kilogram
Отправлено: 29 Апреля, 2012 - 22:20:54
Post Id


Частый гость


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


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




А циклом фор не пашет чего-то.
PHP:
скопировать код в буфер обмена
  1.  
  2. for ($i = 0; $i < count($trans); $i++)
  3. {
  4.     if (is_array($trans[$i]))
  5.         for ($j = 0; $j < count($trans[$i]); $j++)
  6.             echo $trans[$i][$j] . ' ';
  7.     else
  8.         echo $trans[$i] . ' ';
  9. }
  10.  
 
 Top
Bio man
Отправлено: 29 Апреля, 2012 - 22:31:37
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




PHP:
скопировать код в буфер обмена
  1. function echoMuliDimensionalArray(array $rgData){
  2.         foreach($rgData as $mItem){
  3.                 if(is_array($mItem)){
  4.                         echoMuliDimensionalArray($mItem);
  5.                 }else
  6.                         echo $mItem.'<br />';
  7.         }
  8. }
  9. echoMuliDimensionalArray($trans);
?

(Отредактировано автором: 29 Апреля, 2012 - 22:33:08)

 
 Top
kilogram
Отправлено: 30 Апреля, 2012 - 00:32:41
Post Id


Частый гость


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


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




Ух-ты, вот так получилось.

CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. $trans = array(
  3.  0=> array("Мама","Папа","Дядя",),
  4.  1 => -3,
  5.  2 => 105,
  6.  3=>500,
  7.  4=>'Andrey',
  8.  8=> array("Вася","Петя","Коля")
  9. );
  10.  
  11.  
  12. if(!empty($r))echo 'не существует';
  13.  
  14. echo '<br />';
  15.  
  16. for ($i = 0; $i < count($trans); $i++)
  17. {
  18.     if(empty($trans[$i])) continue;
  19.         if (is_array($trans[$i]))
  20.         for ($j = 0; $j < count($trans[$i]); $j++)
  21.             echo $trans[$i][$j] . ' ';
  22.     else
  23.         echo $trans[$i] . ' ';
  24. }
  25. ?>
 
 Top
Bio man
Отправлено: 30 Апреля, 2012 - 00:41:09
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




мда... зачем for да еще и вложенный?
 
 Top
LIME
Отправлено: 30 Апреля, 2012 - 00:45:17
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




да еще и count на каждой итерации
 
 Top
Bio man
Отправлено: 30 Апреля, 2012 - 00:50:49
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




LIME пишет:
да еще и count на каждой итерации
в его случае это значения не имеет. Но верно подмечено.
 
 Top
LIME
Отправлено: 30 Апреля, 2012 - 01:20:03
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




думаю тс просто испугался(непонял/незнает) рекурсий
ну и правильно)) лучше их избегать если можно
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $trans = array(
  3.  0=> array("Мама","Папа","Дядя"),
  4.  1 => -3,
  5.  2 => 105,
  6.  3=>500,
  7.  4=>'Andrey',
  8.  8=> array("Вася","Петя","Коля")
  9. );
  10. foreach($trans as $x)
  11.    if(is_array($x)){
  12.          foreach($x as $y)
  13.                echo $y;
  14.    } else {
  15.         echo $x;
  16.   }      
  17. ?>
 
 Top
kilogram
Отправлено: 30 Апреля, 2012 - 01:56:56
Post Id


Частый гость


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


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




Вот так правильнее, проверил секундомером с учетом если 10 млн номер индекса последний, код запускается чере 14,16 сек. в браузере.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $trans = array(
  4.     0 => array("Мама","Папа","Дядя",),
  5.     1 => -3,
  6.     2 => 105,
  7.     3 => 500,
  8.     4 => 'Andrey',
  9.     10000000 => array("Вася","Петя","Коля")
  10. );
  11.  
  12. end($trans);
  13. $max = key($trans);
  14.  
  15. for ($i = 0; $i <= $max; $i++)
  16. {
  17.     if (!array_key_exists($i, $trans)) continue;
  18.     if (is_array($trans[$i]))
  19.     for ($j = 0; $j < count($trans[$i]); $j++)
  20.         echo $trans[$i][$j] . ' ';
  21.     else
  22.         echo $trans[$i] . ' ';
  23. }
  24. ?>
  25.  

(Отредактировано автором: 30 Апреля, 2012 - 01:57:32)

 
 Top
LIME
Отправлено: 30 Апреля, 2012 - 01:59:09
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




Не понял Ха-ха
(Добавление)
kilogram а вы на весах не вешаете какой код легче?)))))
 
 Top
Bio man
Отправлено: 30 Апреля, 2012 - 12:33:57
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




kilogram пишет:
Вот так правильнее, проверил секундомером с учетом если 10 млн номер индекса последний, код запускается чере 14,16 сек. в браузере.
(facepalm)
Зачем делать 10 млн итераций? Это просто жесть
kilogram пишет:
Вот так правильнее
И так нифига не правельнее, но спорить не буду, т.к. мне по барабану.
 
 Top
ugin_root
Отправлено: 30 Апреля, 2012 - 13:06:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


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




kilogram
а вы понимаете что ваш код будит впустую крутиться 9999995 раз и если ключами будут не цифры а текст то ваш код ничего не выведет?
 
 Top
avtor.fox
Отправлено: 30 Апреля, 2012 - 13:47:32
Post Id



Постоянный участник


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


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




Ха-ха Я теперь знаю сколько у него аккаунтов на этом форуме Ха-ха
 
 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