PHP взорвать текст в многомерный массив - PullRequest
1 голос
/ 28 сентября 2011

Я хочу взорвать этот текст в трехмерный массив :

Q 11 21 21 ( 40 44 23 ! 24 ! ! Q ! 32 22 48 18 23 49 ! ! ! ! 24 23 Q ! 19 23 06 49 29 15 22 ! ! ! Q ! 20 ( 23 23 ( 40 ! ! ! ! Q ! 21 06 ! 22 22 22 02 ! ! !


Q ! ( 40 05 33 ! 05 ! ! ! ! Q ! 49 49 05 20 20 49 ! ! ! Q ! ! 05 34 ( 40 ( ( 1 Q ! ! 46 46 46 46 46 46 ! ! ! Q ( 46 07 20 12 05 33 ! ! ! !

Это расписание в текстовой форме . Ниже приведены условия, которые определяют каждое значение в массиве:

  1. новая строка = следующий график;
  2. Q = новый день;
  3. пробел = следующий час
  4. ! = свободный час,
  5. (= двойной час

И я хочу вот так: массив [расписание] [день] [час]

Как я могу это сделать? Есть ли выбор сделать это с помощью функции PHP Explode?

Ответы [ 4 ]

3 голосов
/ 28 сентября 2011

Какой хороший формат! Я думаю, что до сих пор не понимаю, но все равно попробую ответить ...

  1. используйте explode с "\ n", и вы получите массив расписаний
  2. для каждого элемента этого массива замените его на explode самого себя на 'Q', и вы получите двумерный массив
  3. для каждого элемента каждого элемента этого массива, замените элемент на explode самого себя на ''

Попробуйте сделать это, и если у вас возникли проблемы, отредактируйте ваш вопрос с помощью кода, который вы придумали.

2 голосов
/ 28 сентября 2011

Не понимая, как работают ваши строкиЭтот код должен делать работу.

$timetables = explode("\n", $source);

foreach($timetables as $tablekey => $days)
{
    $timetables[$tablekey] = explode('Q', $days);

    foreach($timetables[$tablekey] as $daykey => $hours)
        $timetables[$tablekey][$daykey] = explode(' ', $hours)
}

print_r($timetables, true);
0 голосов
/ 18 апреля 2013

Вот рекурсивная функция, которая принимает массив разделителей:

function multi_explode($delimiters, $val) {
    $delimiter = array_shift($delimiters);
    if (!empty($delimiter)) {
        $val = explode($delimiter, $val);
        foreach($val as $key => $valval) {
            $val[$key] = multi_explode($delimiters, $valval);
        }
    }
    return $val;
}
0 голосов
/ 28 сентября 2011
$x = //...
$x = explode("\n", $x);
foreach($x as $k => $v) {
  $x[$k] = explode("Q", $x[$k]);
  foreach($x[$k] as $kk => $vv) {
    $x[$k][$kk] = explode(" ", $x[$k][$kk]);
  }
}

С array_map Я думаю, вы получите более приятный код.

...