PHP explode text to multidimensional array
I wanna explode this text to three dimensional array:
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 ! ! ! ! 开发者_StackOverflow中文版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 ! ! ! !
This is timetable is in text form. The following are the conditions that determine each value in the array:
- new row = next time table;
- Q = new day;
- space = next hour
- ! = free hour,
- ( = duplicit hour
And I want it like this: array[timetable][day][hour]
How can I do that? Is there choice do it by PHP explode function?
What a nice format! I think I still don't get it, but I'll try answering anyway...
- use
explode
with "\n" and you'll get an array of timetables - for each element of this array, replace it with an
explode
of itself with 'Q' and you'll have a 2-dimensional array - for each element of each element of this array, replace the element with an
explode
of itself with ' '
Try to do this and if you're having trouble, edit your question with the code you'd come up with.
Without really understanding how your strings work; This code should do the job.
$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);
$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 I think you wiil get somewhat nicer code.
Here is a recursive function that takes an array of delimiters:
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;
}
精彩评论