Добрый день всем! Я беру txt-файлы при помощи file("name.txt"). Все эти файлы ВСЕГДА имеют вид: Понедельник ... ... Вторник ... ... Среда ... и т.д. Одномерный массив, короче. Мне нужно из него сделать двумерный, чтобы потом со строками каждого дня работать отдельно. Должно получиться: $file = array( 'понедельник' => array( '...', '...', '...'), 'вторник' => array( '...', '...', '...'), 'среда' => ( '...', и т.д) Как это провернуть? Спасибо!
Можно, например, так: PHP: <?php function fileSplit($fliename, array $split = array('понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресение')) { $data = file($filename); $result = []; $key = 'unknown'; foreach ($data as $row) { $possibleKey = mb_strtolower(trim($row, "\r\n\t\0 "), 'utf-8'); if (in_array($possibleKey, $split)) { $key = $possibleKey; continue; } $result[$key][] = $row; } return $result; } ?> P.S.: Код не проверял
PHP: <?php $lines = file('disc_rus_s.txt', FILE_IGNORE_NEW_LINES); $days = []; $prev = $day = null; foreach ($lines as $line) { $line = trim($line); if ($prev === '') { $day = $line; $days[$day] = []; } elseif (isset($day) && $line !== '') { $days[$day][] = $line; } $prev = $line; } var_export($days); --- Добавлено --- или как конечный автомат PHP: <?php $lines = file('disc_rus_s.txt', FILE_IGNORE_NEW_LINES); $days = []; $state = null; foreach ($lines as $line) { $line = trim($line); if (strlen($line) == 0) { $state = 'WANT DAY'; continue; } switch ($state) { case 'WANT DAY': $day = $line; $days[$day] = []; $state = 'WANT ROW'; break; case 'WANT ROW': $days[$day][] = $line; break; } } var_export($days);
Содержимое файла: Код (Text): Discovery Russia (Сокращенно) Понедельник, 12 Июня 09:00, 01:00, 04:50 Выжить любой ценой 16+ 10:00, 16:30, 22:30, 06:55 Как это устроено? 12+ ...