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]   

> Без описания
hiddensy
Отправлено: 27 Октября, 2014 - 22:44:25
Post Id


Новичок


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


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




Доброго времени суток.

Люди добрые помогите решить задачку.
Есть одномерный массив с данными
PHP:
скопировать код в буфер обмена
  1.  
  2. $Array1 = array("эксперт", "эксперт авто Москва", "эксперт волос отзывы", "эксперт волос эвалар отзывы", "эксперт журнал", "эксперт интернет магазин", "эксперт медицинский центр", "эксперт работа", "эксперт по ДТП");
  3. echo("<pre>");
  4. print_r($Array1);      
  5. echo("</pre>");
  6.  


Результат вывода:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. Array
  3. (
  4.     [0] => эксперт
  5.     [1] => эксперт авто Москва
  6.     [2] => эксперт волос отзывы
  7.     [3] => эксперт волос эвалар отзывы
  8.     [4] => эксперт журнал
  9.     [5] => эксперт интернет магазин
  10.     [6] => эксперт медицинский центр
  11.     [7] => эксперт работа
  12.     [8] => эксперт по ДТП
  13. )
  14.  


Как получить из этого массива сгрупперованный многомерный массив
PHP:
скопировать код в буфер обмена
  1.  
  2. $Array2 = array("эксперт" => array ("авто" => Array("Москва"), "волос"  => Array("отзывы", "эвалар" => Array("отзывы")), "журнал" , "интернет" => Array("магазин"), "медицинский" => Array("центр"), "работа", "по" => Array("ДТП")));
  3. echo("<pre>");
  4. print_r($Array2);      
  5. echo("</pre>");
  6.  


Результат вывода:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. Array
  3. (
  4.     [эксперт] => Array
  5.         (
  6.             [авто] => Array
  7.                 (
  8.                     [0] => Москва
  9.                 )
  10.  
  11.             [волос] => Array
  12.                 (
  13.                     [0] => отзывы
  14.                     [эвалар] => Array
  15.                         (
  16.                             [0] => отзывы
  17.                         )
  18.  
  19.                 )
  20.  
  21.             [0] => журнал
  22.             [интернет] => Array
  23.                 (
  24.                     [0] => магазин
  25.                 )
  26.  
  27.             [медицинский] => Array
  28.                 (
  29.                     [0] => центр
  30.                 )
  31.  
  32.             [1] => работа
  33.             [по] => Array
  34.                 (
  35.                     [0] => ДТП
  36.                 )
  37.  
  38.         )
  39.  
  40. )
  41.  


Группировка происходит по принцепу:
1) если первое слово в значениях одномерного массива одинаковое, то оно становится ключом
2) второе слово если повторяется то тоже ключ, если нет то значение
3) и т.д.

Голову сломал как это сделать функциями на PHP. Использую explode() для разделения слов в значениях одномерного массива, а дальше вроде бы циклом нужно, но не получается, прошу помощи очень нужно...
 
 Top
kotyara1979
Отправлено: 28 Октября, 2014 - 03:54:27
Post Id


Частый гость


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


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




1. Результат не совпадает с озвученными условиями.
Почему словa авто, медицинский, интернет - ключи? они же уникальны.

2. Условия не полны.
а. совпадение считается только по порядку слов?
б. если не совпадает первое слово, а второе совпадает - записывать как?
в. как записывать уникальные фразы?


-----
Сделать можно все. Главное одеть каску.
 
 Top
hiddensy
Отправлено: 28 Октября, 2014 - 07:37:54
Post Id


Новичок


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


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




kotyara1979 пишет:
1. Результат не совпадает с озвученными условиями.
Почему словa авто, медицинский, интернет - ключи? они же уникальны.

2. Условия не полны.
а. совпадение считается только по порядку слов?
б. если не совпадает первое слово, а второе совпадает - записывать как?
в. как записывать уникальные фразы?


1. Потому что после этих слов идут другие слова с привязкой к этому слову.

2. a) да
б) если не совпадает первое слово, то оно ключ, к ключю привязывается массив повторяющихся слов
в) враза это как минимум 2 слова вариант б)

если просто одно слово, то значение в массиве

Из приведенных 2-х массивов, вроде все понятно как и что должно быть, какое слово куда привязывается.
 
 Top
kotyara1979
Отправлено: 28 Октября, 2014 - 12:57:50
Post Id


Частый гость


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


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




Повторюсь: у вас результат не совпадает с условиями задачи или условия задачи с результатом.

Ваш результат легко и быстро получается вот таким скриптом. Вариант черновой, его можно здорово сократить, но это уже сами.
Спойлер (Отобразить)


Но вашим условиям это не соответствует.


-----
Сделать можно все. Главное одеть каску.
 
 Top
hiddensy
Отправлено: 28 Октября, 2014 - 13:05:28
Post Id


Новичок


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


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




kotyara1979 пишет:
Повторюсь: у вас результат не совпадает с условиями задачи или условия задачи с результатом.

Ваш результат легко и быстро получается вот таким скриптом. Вариант черновой, его можно здорово сократить, но это уже сами.
Спойлер (Отобразить)


Но вашим условиям это не соответствует.



В результате получился массив который я руками сделал в первом посте, один в один.
Не понял тогда про условие, где я не так объяснил или сам чего недопонял.
Но получилось именно то что нужно, спасибо огромное.
 
 Top
hiddensy
Отправлено: 28 Октября, 2014 - 22:00:10
Post Id


Новичок


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


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




Немного изменив код, а именно:
Спойлер (Отобразить)


получил результат результат все слова стали ключами с пустыми массивами.

Спойлер (Отобразить)


как теперь получить одномерный массив где все ключи сформируются по такому принципу
CODE (html):
скопировать код в буфер обмена
  1.  
  2. Array
  3. (
  4.         [0] => эксперт
  5.         [1] => эксперт авто
  6.         [2] => эксперт авто Москва
  7.         [3] => эксперт волос
  8.         [4] => эксперт волос отзывы
  9.         [5] => эксперт волос эвалар
  10.         [6] => эксперт волос эвалар отзывы
  11.         [7] => эксперт журнал
  12.         [8] => эксперт интернет
  13.         [9] => эксперт интернет магазин
  14.         [10] => эксперт медицинский
  15.         [11] => эксперт медицинский центр
  16.         [12] => эксперт работа
  17.         [13] => эксперт по
  18.         [14] => эксперт по ДТП
  19. )
  20.  
 
 Top
kotyara1979
Отправлено: 29 Октября, 2014 - 01:00:53
Post Id


Частый гость


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


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




hiddensy пишет:
как теперь получить одномерный массив где все ключи сформируются по такому принципу


получить откуда?


-----
Сделать можно все. Главное одеть каску.
 
 Top
hiddensy
Отправлено: 29 Октября, 2014 - 05:03:55
Post Id


Новичок


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


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




kotyara1979 пишет:
hiddensy пишет:
как теперь получить одномерный массив где все ключи сформируются по такому принципу


получить откуда?


Из массивы $arr_rez, где все отобранные слова как ключи. код выше.
 
 Top
MAXUS
Отправлено: 29 Октября, 2014 - 10:48:39
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


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




hiddensy пишет:
Люди добрые помогите решить задачку.


PHP:
скопировать код в буфер обмена
  1. $array = array("эксперт", "эксперт авто Москва", "эксперт волос отзывы", "эксперт волос эвалар отзывы", "эксперт журнал", "эксперт интернет магазин", "эксперт медицинский центр", "эксперт работа", "эксперт по ДТП");
  2. foreach($array as $row){
  3.         $current=&$tree;
  4.         $keywords=explode(' ',$row);   
  5.         foreach($keywords as $key=>$word){
  6.                 if($key<count($keywords)-1) $current=&$current[$word];
  7.                 elseif($key!=0) $current[]=$word;
  8.         }
  9. }
  10. echo("<pre>");
  11. print_r($array);
  12. print_r($tree);  
  13. echo("</pre>");
 
 Top
hiddensy
Отправлено: 29 Октября, 2014 - 10:59:10
Post Id


Новичок


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


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




MAXUS пишет:
hiddensy пишет:
Люди добрые помогите решить задачку.


PHP:
скопировать код в буфер обмена
  1. $array = array("эксперт", "эксперт авто Москва", "эксперт волос отзывы", "эксперт волос эвалар отзывы", "эксперт журнал", "эксперт интернет магазин", "эксперт медицинский центр", "эксперт работа", "эксперт по ДТП");
  2. foreach($array as $row){
  3.         $current=&$tree;
  4.         $keywords=explode(' ',$row);   
  5.         foreach($keywords as $key=>$word){
  6.                 if($key<count($keywords)-1) $current=&$current[$word];
  7.                 elseif($key!=0) $current[]=$word;
  8.         }
  9. }
  10. echo("<pre>");
  11. print_r($array);
  12. print_r($tree);  
  13. echo("</pre>");


Спасибо красивый код.
 
 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