2011-09-27 73 views
1

我想爆炸这个文本三维阵列PHP爆炸文字多维数组

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. (= duplicit小时

而且我希望它是这样的: 阵列[时间表] [日] [小时]

我怎么能这样做是否有选择?通过PHP做它爆炸功能?

+2

满足自己的好奇心:是一个标准的该格式的一部分? –

+2

你必须更好地解释才能得到任何答案。 – amosrivera

+0

是什么阻止你为此编码解析器?我的意思是你已经制定了格式,什么阻止你继续? – hakre

回答

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

真是一个好格式!我想我还是不明白这一点,但我会尽力回答反正...

  1. 使用explode为“\ n”,你会得到时间表
  2. 这个数组的每个元素的数组,其本身的explode有“Q”替换它,你就会有一个2维数组
  3. 这个数组的每个元素的每个元素,用自身的explode有'

尝试更换元素来做到这一点,如果你有麻烦了,你会来的代码编辑你的问题与...一起。

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

With array_map我想你会得到更好的代码。

+1

语义代码让你更好地升级tbh。 – sg3s

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