fork download
  1. <?php
  2.  
  3. $test = array(
  4. 'test_1' => array(
  5. 0 => 'dummy1_0',
  6. 1 => '',
  7. 2 => 'dummy1_2',
  8. ),
  9. 'test_3' => array(
  10. 0 => '',
  11. 1 => 'dummy3_1',
  12. 2 => '',
  13. ),
  14. 'test_2' => array(
  15. 0 => 'dummy2_0',
  16. 1 => '',
  17. 2 => 'dummy2_2',
  18. ),
  19. 'test_4' => array(
  20. 0 => '',
  21. 1 => 'dummy4_1',
  22. 2 => '',
  23. ),
  24. );
  25.  
  26. $max = 0;
  27. $result = array();
  28. array_walk_recursive($test, function ($v) use (&$max) {
  29. if (preg_match('/\A[^\d]++(\d++)_\d++\z/', $v, $matches)) {
  30. $max = max((int)$matches[1], $max);
  31. }
  32. });
  33. if ($max > 0) {
  34. array_walk_recursive($test, function ($v) use (&$result, &$max) {
  35. if (preg_match('/\A[^\d]++(\d++)_(\d++)\z/', $v, $matches)) {
  36. $title = 'result_' . ($matches[2] + 1);
  37. if (!isset($result[$title])) {
  38. $result[$title] = array_fill(0, $max, '');
  39. }
  40. $result[$title][$matches[1] - 1] = $v;
  41. }
  42. });
  43. }
  44. uksort($result, 'strnatcmp');
  45. print_r($result);
  46.  
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
Array
(
    [result_1] => Array
        (
            [0] => dummy1_0
            [1] => dummy2_0
            [2] => 
            [3] => 
        )

    [result_2] => Array
        (
            [0] => 
            [1] => 
            [2] => dummy3_1
            [3] => dummy4_1
        )

    [result_3] => Array
        (
            [0] => dummy1_2
            [1] => dummy2_2
            [2] => 
            [3] => 
        )

)