Полагаю, это решение вашей проблемы ...
Если у вас есть такой массив
$A = array("03", "04", "05", "07", "03", "04", "05", "06", "07", "04", "05",
"06", "07", "04", "05", "07", "03", "04", "05", "06", "07", "04", "05", "06",
"07", "04", "05", "07");
... и ожидаемый результат будет таким:
array(3) {
[0]=>
array(1) {
[0]=>
string(10) "030405 07"
}
[1]=>
array(3) {
[0]=>
string(10) "0304050607"
[1]=>
string(10) "0304050607"
[2]=>
string(10) "030405 07"
}
[2]=>
array(3) {
[0]=>
string(10) "0304050607"
[1]=>
string(10) "0304050607"
[2]=>
string(10) "030405 07"
}
}
попробуйте этот код!
$r = -1; $r2 = 0; $last_rec = 2;
$organized_array = array();
foreach ($A as $key => $rec) {
if ($rec == "03") {
// parent
if ($r >= 0) $organized_array[$r][$r2] = str_pad($organized_array[$r][$r2], 10, ' ');
$r++;
$r2 = 0;
$organized_array[$r][$r2] = "03";
}
else {
// children
$this_rec = $rec * 1;
if ($this_rec < $last_rec) {
$organized_array[$r][$r2] = str_pad($organized_array[$r][$r2], 10, ' ');
$r2++;
$organized_array[$r][$r2] = "03";
}
if ($this_rec > ($last_rec + 1)) {
$ec = $this_rec - $last_rec - 1;
$organized_array[$r][$r2] .= str_repeat(" ", $ec);
}
$organized_array[$r][$r2] .= $rec;
}
$last_rec = $rec * 1;
}
var_dump($organized_array);
Надеюсь, это поможет!