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]   

> Описание: Не выводит значение "первого" ключа
K0LbAzzeR
Отправлено: 02 Февраля, 2016 - 06:34:35
Post Id


Новичок


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


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




Не выводит значение "первого" ключа, что не так?

PHP:
скопировать код в буфер обмена
  1.  
  2. $as1 = Array (
  3.   "key0" => "A",
  4.   "key1" => "B",
  5.   "key2" => "C",
  6.   "key3" => "D",
  7.   );
  8. echo '<hr>';
  9. foreach ($as1 as $sValueArray) {
  10.   echo (key($as1).' = '.$sValueArray.'<br>');
  11.   next($as1);
  12. }
  13. echo '<hr>';
  14.  


Выводит:
key1 = A
key2 = B
key3 = C
= D


А нужно:
key0 = A
key1 = B
key2 = C
key3 = D
 
 Top
K0LbAzzeR
Отправлено: 02 Февраля, 2016 - 09:01:00
Post Id


Новичок


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


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




Разобрался, может кому и пригодиться:
PHP:
скопировать код в буфер обмена
  1.  
  2. $as1 = Array (
  3.   "key0" => "A",
  4.   "key1" => "B",
  5.   "key2" => "C",
  6.   "key3" => "D",
  7.   );
  8. echo '<hr>';
  9.  
  10. foreach ($as1 as $sKeyArray => $sValueArray) {
  11.   echo ($sKeyArray.' = '.$sValueArray.'<br>');
  12. }
  13. echo '<hr>';
  14.  

(Добавление)
Дальше - больше )))

Теперь дано:
PHP:
скопировать код в буфер обмена
  1. $as1 = Array (
  2.   "KEY0" => Array (
  3.     "key0" => "a",
  4.     "key1" => "b",
  5.     ),  
  6.   "KEY1" => "B",
  7.   );

Вывод вложенного массива:
PHP:
скопировать код в буфер обмена
  1. foreach ($as1['KEY0'] as $sKeyArray => $sValueArray) {
  2.   echo ($sKeyArray.' = '.$sValueArray.'<br>');  
  3. };

Пытаюсь "зациклить" все это, что бы выводились массивы "постепенно" (но не работает):
PHP:
скопировать код в буфер обмена
  1. foreach ($as1 as $sKeyArray => $sValueArray) {
  2.   if ($sValueArray == 'Array') {
  3.     foreach ($as1['KEY0'] as $sKeyArray => $sValueArray){
  4.       echo ('---<br>');
  5.       echo ($sKeyArray.' = '.$sValueArray.'<br>');      
  6.    };    
  7.   } else {
  8.       echo ($sKeyArray.' = '.$sValueArray.'<br>');    
  9.   }
  10. };

Что нужно подправить что бы получить такое:
KEY0 = Array
---
key0 = a
key1 = b
---
KEY1 = B
 
 Top
Andrew_quest
Отправлено: 02 Февраля, 2016 - 15:47:50
Post Id


Новичок


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


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




(Добавление)
PHP:
скопировать код в буфер обмена
  1.  здесь много ненужных скобок и т.д. посмотрите внимательно
  2.     foreach ($as1 as $sKeyArray => $sValueArray) {
  3.       if ($sValueArray == 'Array') { <<<< что вы здесь пытаетесь найти ??? увас такого значения в массиве нет...
  4.            echo ('---<br>');
  5.           echo ($sKeyArray.' = '.$sValueArray.'<br>');      
  6.        };    
  7.       } else {
  8.           echo ($sKeyArray.' = '.$sValueArray.'<br>');    
  9.       }
  10.     };
  11.  
  12.  

(Добавление)
http://www.php.su/learnphp/datatypes/?array почитайте внимательно про создание массива и его вывод

PHP:
скопировать код в буфер обмена
  1.  
  2. $asa1 = array (
  3.       "KEY0" => Array (
  4.                         "key0" => "a",
  5.                         "key1" => "b",
  6.                       ),  
  7.       "KEY1" => "B",
  8.               );
  9.  foreach ($asa1 as $sKeyArray => $sValueArray) {
  10.              
  11.           print_r ($sValueArray). "<br>";      
  12.  
  13.         };
  14.  
  15.  

(Отредактировано автором: 02 Февраля, 2016 - 16:30:18)

 
 Top
Andrew_quest
Отправлено: 02 Февраля, 2016 - 17:48:08
Post Id


Новичок


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $asa1 = array (
  4.       "KEY0" => array (
  5.                         "key0" => "a",
  6.                         "key1" => "b",
  7.                       ),  
  8.       "KEY1" => "B",
  9.               );
  10.         foreach ($asa1 as $key => $value) {
  11.             foreach ($asa1[$key] as $key2 => $value2) {
  12.                                        echo "$key => $key2 => $value2"."<br>";
  13.                        }
  14.                 }
  15.                     echo "$key => $value";
  16.  
  17.  
  18. ?>
  19.  

(Отредактировано автором: 02 Февраля, 2016 - 17:48:43)

 
 Top
K0LbAzzeR
Отправлено: 03 Февраля, 2016 - 04:02:46
Post Id


Новичок


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


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




Andrew_quest пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $asa1 = array (
  4.       "KEY0" => array (
  5.                         "key0" => "a",
  6.                         "key1" => "b",
  7.                       ),  
  8.       "KEY1" => "B",
  9.               );
  10.         foreach ($asa1 as $key => $value) {
  11.             foreach ($asa1[$key] as $key2 => $value2) {
  12.                                        echo "$key => $key2 => $value2"."<br>";
  13.                        }
  14.                 }
  15.                     echo "$key => $value";
  16.  
  17.  
  18. ?>
  19.  

Это решение "узконаправленное" т.к. не была описана задача полностью.
Задача состоит в следующем разложить ассоциативный многомерный массив на составляющие (пара "значение ключа" = "значение переменной в массиве, по этому ключу"). Конкретные данные в массиве не известны, степень вложения массива тоже не известна.

На данном этапе решил как работать "стандартно" (для любых входящих массивов) с глубиной вложения 2, думаю что нужно в будущем организовать все это дело через пользовательские функции.
Вот что на данный момент у меня есть:
PHP:
скопировать код в буфер обмена
  1. $as1 = Array (
  2.   "KEY0" => Array (
  3.     "key0.0" => "a",
  4.         "key0.1" => "b",
  5.     ), 
  6.   "KEY1" => "B",
  7.   "KEY2" => Array (
  8.     "key2.0" => "1",
  9.         "key2.1" => "2",
  10.     ), 
  11.   );
  12.  
  13. print_r ($as1);
  14. echo '<hr>';
  15.  
  16. foreach ($as1 as $sKeyArray => $sValueArray) {
  17.   if (is_array($sValueArray)) {
  18.     echo ($sKeyArray.' = '.$sValueArray.'<br>');
  19.         foreach ($as1[$sKeyArray] as $sKeyArray => $sValueArray){
  20.       echo ($sKeyArray.' = '.$sValueArray.'<br>');             
  21.         };       
  22.   } else {
  23.       echo ($sKeyArray.' = '.$sValueArray.'<br>');       
  24.   }
  25. };

(Отредактировано автором: 03 Февраля, 2016 - 10:04:56)

 
 Top
K0LbAzzeR
Отправлено: 03 Февраля, 2016 - 09:28:21
Post Id


Новичок


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


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




Решил задачу с глубиной вложения 3:
PHP:
скопировать код в буфер обмена
  1. $as1 = Array (
  2.   "KEY0" => "A",
  3.   "KEY1" => Array (
  4.     "key1.0" => "aa",
  5.         "key1.1" => "bb",
  6.         "key1.2" => Array (
  7.                 "KeY1.0.0" => "AAA",
  8.                 "KeY1.0.1" => "BBB",
  9.                 ),
  10.         "key1.3" => "dd",
  11.     ), 
  12.   "KEY2" => "C",
  13.   "KEY3" => Array (
  14.     "key3.0" => "11",
  15.         "key3.1" => "22",
  16.         "key3.2" => Array (
  17.                 "KeY3.2.0" => "ABA",
  18.                 "KeY3.2.1" => "BAB",
  19.             ),
  20.     ), 
  21.   "KEY4" => "E",
  22. );
  23. foreach ($as1 as $sKeyArray1 => $sValueArray1) {
  24.   if (is_array($sValueArray1)) { // "элемент массива" = "массив элементов"
  25.     echo ($sKeyArray1.' = '.$sValueArray1.'<br>');
  26.         foreach ($as1[$sKeyArray1] as $sKeyArray2 => $sValueArray2){
  27.           if (is_array($sValueArray2)) { // "элемент массива" = "массив элементов"
  28.             echo ($sKeyArray2.' = '.$sValueArray2.'<br>');
  29.                 foreach ($as1[$sKeyArray1][$sKeyArray2] as $sKeyArray3 => $sValueArray3){
  30.                   echo ($sKeyArray3.' = '.$sValueArray3.'<br>');
  31.                 };
  32.       }
  33.       else {
  34.         echo ($sKeyArray2.' = '.$sValueArray2.'<br>');
  35.       };
  36.         };       
  37.   }
  38.   else {
  39.         echo ($sKeyArray1.' = '.$sValueArray1.'<br>');
  40.   }
  41. };

Вопрос такой характера, можно ли как то сократить такую запись:
PHP:
скопировать код в буфер обмена
  1. foreach ($as1[$sKeyArray1][$sKeyArray2] as $sKeyArray3 => $sValueArray3) {
  2. }

А то если глубина вложений будет например равна семи, то строка получиться такая (не совсем удобно "работать" с такой):
PHP:
скопировать код в буфер обмена
  1. foreach ($as1[$sKeyArray1][$sKeyArray2][$sKeyArray3][$sKeyArra4][$sKeyArray5][$sKeyArray6][$sKeyArray7] as $sKeyArray7 => $sValueArray7) {
  2. }
 
 Top
Viper
Отправлено: 03 Февраля, 2016 - 09:52:50
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




K0LbAzzeR почитайте про рекурсию.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 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