【问题标题】:PHP explode text to multidimensional arrayPHP将文本分解为多维数组
【发布时间】:2011-11-26 09:08:14
【问题描述】:

我想把这段文字分解成三维数组

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 的爆炸函数来实现?

【问题讨论】:

  • 满足我自己的好奇心:这种格式是标准的一部分吗?
  • 你必须更好地解释才能得到任何答案..
  • 是什么阻止您只为解析器编写代码?我的意思是你已经制定了格式,是什么阻止你继续?

标签: php multidimensional-array explode


【解决方案1】:

多么好的格式!我想我还是不明白,但我还是会尝试回答......

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

尝试这样做,如果您遇到问题,请使用您想出的代码编辑您的问题。

【讨论】:

    【解决方案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);
    

    【讨论】:

      【解决方案3】:
      $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,我想你会得到更好的代码。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-13
          • 1970-01-01
          • 2021-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-10
          • 1970-01-01
          相关资源
          最近更新 更多