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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Кровавый Помидор
Отправлено: 25 Октября, 2018 - 09:56:30
Post Id


Новичок


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


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




Всем привет!
У меня такой вот вопрос, есть массив и неизвестное количество вложенных массивов, например
PHP:
скопировать код в буфер обмена
  1.  
  2. $array = array(
  3. 'ceo' => "benjamin button',
  4.   array('cto' =>'steve wonder', 'head of finance dep.' =>'donald duck'),
  5.     array('team lead' => 'rude mustach', 'second team lead' => 'senior pomidor',
  6.        array('senior dev' => 'jar-jar bings', 'tech spec' => '.net', 'salary' => '5 majorlion dollars'),
  7.        array('senior dev' => 'obi-wan kenoby', tech spec' => 'java', 'salary'=>'10% of all revenues', array('junior dev' => 'little any skywalking', 'teachedby' => 'obi-wan kenoby')),
  8.  
  9. 'owner' => 'mister beans'
  10.  
  11.  

как вот это все вывести в ASCII таблицу при этом имея в качестве входных данных любой массив с любой величиной вложенности массивов и не получить ошибок?
 
 Top
Строитель Модератор
Отправлено: 25 Октября, 2018 - 11:14:25
Post Id



Участник


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


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




Кровавый Помидор
Спойлер (Отобразить)
?
 
 Top
Кровавый Помидор
Отправлено: 25 Октября, 2018 - 12:08:45
Post Id


Новичок


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


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




Спасибо, немножечко не тот результат который нужен(
Как проверить наличие массива вложенного в другой массив?
то есть
PHP:
скопировать код в буфер обмена
  1.  
  2.    ke1=>value1,
  3.       array(key2=>value2, key3=>value3),
  4.       array(key4=>value4, key5=>value5,
  5.             array(key6=>value6,)),
  6.    key7=>value7);
  7.  

Единственный вариант, как я понимаю это рекурсия, и должно быть, как я понимаю, что-то такое
PHP:
скопировать код в буфер обмена
  1.  
  2. function checkarr ($arr) {
  3.     foreach ($arr as $item) {
  4.         if ($item contains anoter arr) {
  5.             checkarr($item);
  6.         } else {
  7.            
  8. //do something else
  9. }
  10.  

и вот я дупля не отбиваю что нужно написать вместо if ($item contains anoter arr)


CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. =========================================================================
  3.  
  4. |    name       |       role     | salary | trainedby |  tech spec |      
  5.  
  6. --------------------------------------------------------------------------
  7.  
  8. |mister beans   |    owner       |        |           |             |
  9.  
  10. |benjamin button|      ceo       |        |           |             |
  11.  
  12. |steve wonder   |    cto         |        |           |             |
  13.  
  14. |donald duck    |head of fin dep |        |           |             |
  15.  
  16. |rude mustach   |team lead       |        |           |             |
  17.  
  18. =========================================================================
  19.  
  20.  


вот что-то на подобии такого я пытаюсь получить в результате

(Отредактировано автором: 25 Октября, 2018 - 12:22:28)

 
 Top
Строитель Модератор
Отправлено: 25 Октября, 2018 - 12:52:10
Post Id



Участник


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


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




Кровавый Помидор пишет:
Как проверить наличие массива
Функцией is_array().
 
 Top
Кровавый Помидор
Отправлено: 25 Октября, 2018 - 13:10:34
Post Id


Новичок


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


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




Строитель пишет:
Кровавый Помидор пишет:
Как проверить наличие массива
Функцией is_array().
о, спасибо!
не увидел такой функции в списке функций для работы с массивами
(Добавление)
и еще такой вопрос
я теряю ключи при переборе
как исправить этот код чтобы ключи не терялись?
PHP:
скопировать код в буфер обмена
  1.  
  2. function checkarr ($arr)
  3. {
  4.     foreach ($arr as $item) {
  5.  
  6.         if (is_array($item)) {
  7.             echo "это массив!<br>";
  8.             checkarr($item);
  9.  
  10.         } else {
  11. echo "<br>";
  12. echo key($arr) . "=>" . $item;
  13.      
  14.         }
  15.     }
  16. }
  17.  
  18. checkarr($data);
  19.  
 
 Top
Строитель Модератор
Отправлено: 25 Октября, 2018 - 13:24:56
Post Id



Участник


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


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




Кровавый Помидор пишет:
как исправить этот код чтобы ключи не терялись?


foreach ($arr as $key => $item) { ...
(Добавление)
Почитайте про foreach () {}
http://php.net/manual/ru/control...ures.foreach.php
 
 Top
Кровавый Помидор
Отправлено: 25 Октября, 2018 - 14:00:32
Post Id


Новичок


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


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




Спасибо огромное!
получается теперь что-то такое
http://prntscr[dot]com/laamx1

теперь буду думать как это привести в вид, который выше показал)
 
 Top
Строитель Модератор
Отправлено: 25 Октября, 2018 - 14:20:11
Post Id



Участник


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


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




Кровавый Помидор пишет:
получается теперь что-то такое
Не могу посмотреть - на работе прокси сервер блокирует этот ресурс Недовольство, огорчение
 
 Top
Кровавый Помидор
Отправлено: 25 Октября, 2018 - 14:30:38
Post Id


Новичок


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


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




оу, тогда так)
Прикреплено изображение (Нажмите для увеличения)
Screenshot_12.jpg
 
 Top
Строитель Модератор
Отправлено: 25 Октября, 2018 - 14:33:28
Post Id



Участник


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


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




Кровавый Помидор пишет:
тогда так)
Код ваш ещё не мешало бы показать, и массив тоже ) Что б я мог воспроизвести работу скрипта на своём ПК.
 
 Top
Кровавый Помидор
Отправлено: 25 Октября, 2018 - 14:34:19
Post Id


Новичок


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


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




Получается, теперь нужно по шагам сделать следующее:
выбрать все ключи в отдельный массив и удалить дубликаты, чтобы вывести заглавия из первой строки
потом каждый из массивов приводить к одному виду(добавить недостатующие key с пустыми value) и набить этим всем уже один многомерный массив, который в конце концов и вывести чтобы получилась ровно та таблица, которую мне нужно получить
в правильном направлении думаю?
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $data = array(
  4.     'ceo' => "benjamin button",
  5.   array('cto' =>'steve wonder', 'head of finance dep.' =>'donald duck'),
  6.     array('team lead' => 'rude mustach', 'second team lead' => 'senior pomidor',
  7.        array('senior dev' => 'jar-jar bings', 'tech spec' => '.net', 'salary' => '5 majorlion dollars'),
  8.        array('senior dev' => 'obi-wan kenoby', 'tech spec' => 'java', 'salary'=>'10% of all revenues', array('junior dev' => 'little any skywalking', 'teachedby' => 'obi-wan kenoby')),
  9.  
  10. 'owner' => 'mister beans'),);
  11.  
  12.  
  13.  
  14.  
  15. function checkarr ($arr)
  16. {
  17.     echo "=======================================================";
  18.     foreach ($arr as $key => $item) {
  19.      //   var_dump($item);
  20.         if (is_array($item)) {
  21.       //     echo "это массив!<br>";
  22.  
  23.             checkarr($item);
  24.  
  25.         } else {
  26.             echo "<br>";
  27.  
  28.  
  29.                 echo "$key =>  $item <br>";
  30.  
  31.         }
  32.     }
  33.     echo "=======================================================";
  34. }
  35.  
  36. checkarr($data);
  37.  
  38.  
  39.  
 
 Top
Строитель Модератор
Отправлено: 25 Октября, 2018 - 14:39:51
Post Id



Участник


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


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




Кровавый Помидор пишет:
потом каждый из массивов приводить к одному виду(добавить недостатующие key с пустыми value)
А как же вы сохраните связь между ключами-дубликатами и новыми значениями? Я думаю, что так у вас не получится.
 
 Top
Кровавый Помидор
Отправлено: 25 Октября, 2018 - 14:49:34
Post Id


Новичок


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


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




то есть я имею ввиду что сначала делаю отдельный массив
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr1 = array('name', 'role', 'salary','name','name','salary',...)
  3.  

потом в нем убираю дубликаты
после этого каждый отдельно разобранный массив вгоняю в многомерный массив
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr2 = array('name'=>'donald duck', 'role'=>'head of finance department')
  3.  

и проверяю второй массив по списку из первого массива, и если такого ключа нет, то добавляю в массив отсутствующий ключ с пустым значением, после чего второй массив уходит в третий, многомерный правильный массив который легко выводить по порядку для таблицы

и после всего этого сортирую по ключи массива в алфавитном порядке

я немного накосячил с примером данных, спешил с описанием) должно быть чуть подробнее, не 'ceo'=>'benjamin button' а array('role'=>'ceo', 'name'=>benjamin button') и тд

(Отредактировано автором: 25 Октября, 2018 - 14:52:09)

 
 Top
Строитель Модератор
Отправлено: 25 Октября, 2018 - 14:57:52
Post Id



Участник


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


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




Кровавый Помидор пишет:
то есть я имею ввиду что сначала делаю отдельный массив
Ну вы можете прямо в вашей функции собрать многомерный массив, вида:
Спойлер (Отобразить)
Посмотрите внимательно на его структуру - такой вам подойдёт массив в результате?
(Добавление)
Кровавый Помидор пишет:
и после всего этого сортирую по ключи массива в алфавитном порядке
Не сразу обратил внимание на этот момент - с учётом сортировки по ключам можно собрать такой массив:
Спойлер (Отобразить)
UPD:
Спойлер (Отобразить)
 
 Top
Кровавый Помидор
Отправлено: 25 Октября, 2018 - 15:58:12
Post Id


Новичок


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


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




такой вариант получается немножечко отличным от такого, какой нужно получить)
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. =========================================================================
  3.  
  4. |    name       |       role     | salary | trainedby |  tech spec |      
  5.  
  6. --------------------------------------------------------------------------
  7.  
  8. |mister beans   |    owner       |        |           |             |
  9.  
  10. |benjamin button|      ceo       |        |           |             |
  11.  
  12. |steve wonder   |    cto         |        |           |             |
  13.  
  14. |donald duck    |head of fin dep |        |           |             |
  15.  
  16. |rude mustach   |team lead       |        |           |             |
  17.  
  18. =========================================================================
  19.  
  20.  


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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB