За последние 24 часа нас посетили 43874 программиста и 1813 роботов. Сейчас ищут 1785 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем forever_young, 16 июн 2017.

  1. forever_young

    forever_young Новичок

    С нами с:
    24 мар 2017
    Сообщения:
    26
    Симпатии:
    2
    Привет! Я обрабатываю один день из тв-программы. Делаю два массива: один - со временем, другой - с названием передачи. Затем объединяю их в один (код в самом низу). Я с foreach немного запутался - ведь строк должно быть столько, сколько и времен, а не сколько передач. Получается такой результат.

    Код (Text):
    1. Array
    2. (
    3.     [10:00] => Школа горилл
    4.     [09:36] => Школа горилл
    5. )
    6. Array
    7. (
    8.     [10:25] => Экзотические питомцы
    9.     [14:00] => Экзотические питомцы
    10.     [23:10] => Экзотические питомцы
    11.     [07:15] => Экзотические питомцы
    12. )
    13. Array
    14. (
    15.     [11:15] => В дебрях Африки
    16.     [15:50] => В дебрях Африки
    17. )
    18. Array
    19. (
    20.     [12:10] => Королева львов
    21.     [17:40] => Королева львов
    22.     [01:55] => Королева львов
    23.     [06:25] => Королева львов
    24. )
    25. Array
    26. (
    27.     [13:05] => Аквариумный бизнес
    28.     [18:35] => Аквариумный бизнес
    29.     [22:15] => Аквариумный бизнес
    30.     [05:35] => Аквариумный бизнес
    31. )
    32. Array
    33. (
    34.     [14:55] => Самые милые питомцы Америки
    35.     [03:45] => Самые милые питомцы Америки
    36. )
    37. Array
    38. (
    39.     [16:45] => Речные монстры
    40. )
    41. Array
    42. (
    43.     [19:30] => Вторжение гигантских крокодилов
    44.     [02:50] => Вторжение гигантских крокодилов
    45.     [08:02] => Вторжение гигантских крокодилов
    46. )
    47. Array
    48. (
    49.     [20:25] => Полиция Хьюстона: отдел по защите животных
    50.     [00:05] => Полиция Хьюстона: отдел по защите животных
    51.     [04:40] => Полиция Хьюстона: отдел по защите животных
    52. )
    53. Array
    54. (
    55.     [21:20] => Правосудие Техаса
    56.     [01:00] => Правосудие Техаса
    57.     [08:49] => Правосудие Техаса
    58. )
    А надо, чтобы получилось вот так:

    Код (Text):
    1. Array
    2. (
    3.     [10:00] => Школа горилл
    4.     [09:36] => Школа горилл
    5.     [10:25] => Экзотические питомцы
    6.     [14:00] => Экзотические питомцы
    7.     [23:10] => Экзотические питомцы
    8.     [07:15] => Экзотические питомцы
    9.     [11:15] => В дебрях Африки
    10.     [15:50] => В дебрях Африки
    11.     [12:10] => Королева львов
    12.     [17:40] => Королева львов
    13.     [01:55] => Королева львов
    14.     [06:25] => Королева львов
    15.     [13:05] => Аквариумный бизнес
    16.     [18:35] => Аквариумный бизнес
    17.     [22:15] => Аквариумный бизнес
    18.     [05:35] => Аквариумный бизнес
    19.     [14:55] => Самые милые питомцы Америки
    20.     [03:45] => Самые милые питомцы Америки
    21.     [16:45] => Речные монстры
    22.     [19:30] => Вторжение гигантских крокодилов
    23.     [02:50] => Вторжение гигантских крокодилов
    24.     [08:02] => Вторжение гигантских крокодилов
    25.     [20:25] => Полиция Хьюстона: отдел по защите животных
    26.     [00:05] => Полиция Хьюстона: отдел по защите животных
    27.     [04:40] => Полиция Хьюстона: отдел по защите животных
    28.     [21:20] => Правосудие Техаса
    29.     [01:00] => Правосудие Техаса
    30.     [08:49] => Правосудие Техаса
    31. )
    Помогите подправить код, пожалуйста?

    Собственно, сам код:
    Код (Text):
    1.  
    2. <?php
    3.  
    4.     $raw_tv = array(
    5.     '10:00, 09:36 Школа горилл',
    6.     '10:25, 14:00, 23:10, 07:15 Экзотические питомцы',
    7.     '11:15, 15:50 В дебрях Африки',
    8.     '12:10, 17:40, 01:55, 06:25 Королева львов',
    9.     '13:05, 18:35, 22:15, 05:35 Аквариумный бизнес',
    10.     '14:55, 03:45 Самые милые питомцы Америки',
    11.     '16:45 Речные монстры',
    12.     '19:30, 02:50, 08:02 Вторжение гигантских крокодилов',
    13.     '20:25, 00:05, 04:40 Полиция Хьюстона: отдел по защите животных',
    14.     '21:20, 01:00, 08:49 Правосудие Техаса'
    15.     );
    16.    
    17.    
    18.     foreach ($raw_tv as $line) {
    19.         preg_match_all('/[0-2][0-9]:[0-5][0-9]/u', $line, $time_array, PREG_PATTERN_ORDER);
    20.         preg_match_all('/([а-яёa-z]+(.)+)+/ui', $line, $show_array, PREG_PATTERN_ORDER);
    21.        
    22.            foreach($show_array[0] as $show){
    23.                $arrIn = array_fill_keys($time_array[0], $show);
    24.                 }
    25.                
    26.                    
    27.             echo '<pre>';
    28.                 print_r($arrIn);
    29.             echo '</pre>';
    30.            
    31.     }
    32.    
    33.        
    34. ?>
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
  3. forever_young

    forever_young Новичок

    С нами с:
    24 мар 2017
    Сообщения:
    26
    Симпатии:
    2
    Хм, а подробнее... Куда вписать?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не, надо проходить по всем массивам, собирать их ключи через запятую и т.п.
     
  5. forever_young

    forever_young Новичок

    С нами с:
    24 мар 2017
    Сообщения:
    26
    Симпатии:
    2
    Я вроде разобрался

    PHP:
    1. <?php
    2.  
    3.     $raw_tv = array(
    4.     '10:00, 09:36 Школа горилл',
    5.     '10:25, 14:00, 23:10, 07:15 Экзотические питомцы',
    6.     '11:15, 15:50 В дебрях Африки',
    7.     '12:10, 17:40, 01:55, 06:25 Королева львов',
    8.     '13:05, 18:35, 22:15, 05:35 Аквариумный бизнес',
    9.     '14:55, 03:45 Самые милые питомцы Америки',
    10.     '16:45 Речные монстры',
    11.     '19:30, 02:50, 08:02 Вторжение гигантских крокодилов',
    12.     '20:25, 00:05, 04:40 Полиция Хьюстона: отдел по защите животных',
    13.     '21:20, 01:00, 08:49 Правосудие Техаса'
    14.     );
    15.    
    16.     $arrOut = array();
    17.    
    18.     foreach ($raw_tv as $line){
    19.         preg_match_all('/[0-2][0-9]:[0-5][0-9]/u', $line, $time_array, PREG_PATTERN_ORDER);
    20.         preg_match_all('/([а-яёa-z]+(.)+)+/ui', $line, $show_array, PREG_PATTERN_ORDER);
    21.      
    22.                  
    23.            foreach($show_array[0] as $show){
    24.                $arrIn = array_fill_keys($time_array[0], $show);
    25.                }
    26.              
    27.                $arrOut = array_merge($arrOut, $arrIn);
    28.                      
    29.     }
    30.            
    31.             echo '<pre>';
    32.                 print_r($arrOut);
    33.             echo '</pre>';
    34.  
    35.    
    36. ?>
     
  6. forever_young

    forever_young Новичок

    С нами с:
    24 мар 2017
    Сообщения:
    26
    Симпатии:
    2
    Даже не знаю, стоит ли создавать новую тему или здесь продолжить... Следующая цель - это сортировка по времени.

    Если написать:

    PHP:
    1. ksort($arrOut)
    2.  
    3. echo '<pre>';
    4.   print_r($arrOut);
    5. echo '</pre>';
    ...то выведет:

    Код (Text):
    1. Array
    2. (
    3.     [00:05] => Полиция Хьюстона: отдел по защите животных
    4.     [01:00] => Правосудие Техаса
    5.     [01:55] => Королева львов
    6.     [02:50] => Вторжение гигантских крокодилов
    7.     [03:45] => Самые милые питомцы Америки
    8.     [04:40] => Полиция Хьюстона: отдел по защите животных
    9.     [05:35] => Аквариумный бизнес
    10.     [06:25] => Королева львов
    11.     [07:15] => Экзотические питомцы
    12.     [08:02] => Вторжение гигантских крокодилов
    13.     [08:49] => Правосудие Техаса
    14.     [09:36] => Школа горилл
    15.    
    16.   //Все, что находится выше и ниже ЭТОЙ строки, нужно поменять местами...
    17.  
    18.     [10:00] => Школа горилл
    19.     [10:25] => Экзотические питомцы
    20.     [11:15] => В дебрях Африки
    21.     [12:10] => Королева львов
    22.     [13:05] => Аквариумный бизнес
    23.     [14:00] => Экзотические питомцы
    24.     [14:55] => Самые милые питомцы Америки
    25.     [15:50] => В дебрях Африки
    26.     [16:45] => Речные монстры
    27.     [17:40] => Королева львов
    28.     [18:35] => Аквариумный бизнес
    29.     [19:30] => Вторжение гигантских крокодилов
    30.     [20:25] => Полиция Хьюстона: отдел по защите животных
    31.     [21:20] => Правосудие Техаса
    32.     [22:15] => Аквариумный бизнес
    33.     [23:10] => Экзотические питомцы
    34. )
    А на самом деле нужно сделать так, чтобы все, что до 10:00, шло после 23:10... Есть у кого-нибудь идеи?
     
    denis01 нравится это.