Code: Select all
<?php
$test = array(
array(
array(
'val1',
'val2',
'val3',
),
'val4',
'val5',
),
array(
'val6',
array(
'val7',
'val8',
'val9',
),
'val10',
),
array(
'val11',
'val12',
array(
'val13',
'val14',
'val15',
),
),
);
$expected = array(
'val1',
'val2',
'val3',
'val4',
'val5',
'val6',
'val7',
'val8',
'val9',
'val10',
'val11',
'val12',
'val13',
'val14',
'val15',
);
function array_flatten_recursive(array $d)
{
$out = array();
foreach($d as $v)
{
if (is_array($v))
{
$out = array_merge($out, array_flatten_recursive($v));
}
else
{
$out[] = $v;
}
}
return $out;
}
function array_flatten(array $d)
{
$s = array(array(array_values($d),0));
$out = array();
$c = 0;
do
{
$z = count($s);
$j = $z - 1;
for($i = $s[$j][1], $l = count($s[$j][0]);
$i < $l;
++$i)
{
if (is_array($s[$j][0][$i]))
{
$s[$j][1] = $i + 1;
$s[] = array(array_values($s[$j][0][$i]), 0);
break;
}
else
{
$out[] = $s[$j][0][$i];
}
}
if ($i >= $l)
{
array_pop($s);
}
else
{
continue;
}
}
while(count($s) > 0);
return $out;
}
$result = array_flatten_recursive($test);
echo 'array_flatten_recursive() ' .
($result == $expected ? 'PASSED' : 'FAILED' . PHP_EOL .
var_export($result, true)) .
PHP_EOL . PHP_EOL;
$result = array_flatten($test);
echo 'array_flatten() ' .
($result == $expected ? 'PASSED' : 'FAILED' . PHP_EOL .
var_export($result, true)) .
PHP_EOL . PHP_EOL;
Code: Select all
feyd:~ feyd$ php -f arraycrush.php
array_flatten_recursive() PASSED
array_flatten() PASSED