fork(6) download
  1. <?php
  2. $txt_data = "BEGIN
  3. #1
  4. #2
  5. #3
  6. #4
  7. #5
  8. #6
  9. 1 2015-05-31 2001-11-24 'Name Surname' ID_1 0
  10. 2
  11. 2011-04-01 ? ? ID_2 1
  12. 2 2013-02-24 ? ?
  13. ID_3 1
  14. 2 2014-02-28 ? 'Name Surname' ID_4 2
  15. END
  16. ";
  17.  
  18. $loop_pattern = "/BEGIN(.*?)END/s";
  19. preg_match_all($loop_pattern, $txt_data, $matches);
  20. $loops = $matches[0];
  21.  
  22. $loops_count = count($loops);
  23.  
  24. foreach ($loops as $key => $value) {
  25. $value = trim($value);
  26. $pattern = array("/[[:blank:]]+/", "/BEGIN(.*)/", "/END(.*)/");
  27. $replacement = array(" ", "", "");
  28. $value = preg_replace($pattern, $replacement, $value);
  29.  
  30. preg_match_all( '/^#\d+/m', $value, $matches );
  31. $keys = $matches[0];
  32.  
  33. $value = preg_replace( '/^#\d+\s*/m', '', $value );
  34.  
  35. $value = str_replace( "\n", " ", $value );
  36.  
  37. $pattern = '/'.str_repeat( "('[^']+'|\S+)\s+", count( $keys ) ).'/';
  38.  
  39. preg_match_all( $pattern, $value, $matches );
  40.  
  41. $values = array_combine( $keys, array_slice( $matches, 1 ) );
  42.  
  43. print_r( $values );
  44. }
  45.  
Success #stdin #stdout 0.02s 52432KB
stdin
Standard input is empty
stdout
Array
(
    [#1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 2
            [3] => 2
        )

    [#2] => Array
        (
            [0] => 2015-05-31
            [1] => 2011-04-01
            [2] => 2013-02-24
            [3] => 2014-02-28
        )

    [#3] => Array
        (
            [0] => 2001-11-24
            [1] => ?
            [2] => ?
            [3] => ?
        )

    [#4] => Array
        (
            [0] => 'Name Surname'
            [1] => ?
            [2] => ?
            [3] => 'Name Surname'
        )

    [#5] => Array
        (
            [0] => ID_1
            [1] => ID_2
            [2] => ID_3
            [3] => ID_4
        )

    [#6] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 1
            [3] => 2
        )

)