PHP将文本分解为多维数组

时间:2011-09-27 20:35:06

标签: php multidimensional-array explode

我想将此文本分解为三维数组

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. space = next hour
  4. ! =免费小时,
  5. (=重复小时
  6. 我希望这样: 的阵列[时间表] [天] [小时]

    我该怎么做?有没有选择通过PHP爆炸功能来做?

4 个答案:

答案 0 :(得分:3)

多么好的格式!我想我仍然没有得到它,但无论如何我都会尝试回答......

  1. explode与“\ n”一起使用,您将获得一系列时间表
  2. 对于此数组的每个元素,将其替换为带有“Q”的explode,并且您将拥有一个二维数组
  3. 对于此数组的每个元素的每个元素,使用“{/ li>”替换自身为explode的元素

    尝试执行此操作,如果遇到问题,请使用您提供的代码编辑问题。

答案 1 :(得分:2)

没有真正了解你的字符串是如何工作的;这段代码应该可以胜任。

$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);

答案 2 :(得分:0)

$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我认为你会获得更好的代码。

答案 3 :(得分:0)

这是一个递归函数,它接受一个分隔符数组:

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;
}