开发者

PHP explode text to multidimensional array

开发者 https://www.devze.com 2023-04-07 21:13 出处:网络
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 2

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:

  1. new row = next time table;
  2. Q = new day;
  3. space = next hour
  4. ! = free hour,
  5. ( = 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...

  1. use explode with "\n" and you'll get an array of timetables
  2. for each element of this array, replace it with an explode of itself with 'Q' and you'll have a 2-dimensional array
  3. 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;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号