不使用RecursiveIteratorIterator进行数组内部数组的PHP数组格式化

时间:2018-11-27 10:47:12

标签: php arrays multidimensional-array

如何获得这种格式?结果应该是动态的:

1 
a 
b 
0

这是我的原始数组:

$arr = array(0 => 1,
        array(
            0 => 'a',
            1 => 'b'
        ),
        'c' => '0'
    );

我尝试过:

$kArr = array();
for($i=0; $i<count($arr); $i++ ){
    $iArr = array();
    echo $arr[$i];
    foreach($arr[$i] as $key => $value){
        if(!is_array($value)) continue;

        foreach($value as $subKey => $subValue){            
            $iArr[] = $subValue;
        }
    }

    if(count($iArr) > 0 )
        $kArr[$i] = $iArr;
}

echo '<pre>'; print_r($kArr);

我哪里错了?如果还有其他方法,请告诉我。

5 个答案:

答案 0 :(得分:1)

foreach ($arr as $k => $v) {
        if (is_array($v)) {
            foreach ($v as $k2 => $v2) {
                echo "$v2\n";       
            }
        } else {
            echo "$v\n";
        }
    }

如果您想从头开始,可以尝试这样的操作。

答案 1 :(得分:1)

要获得所需的结果,您必须遍历 $ arr 变量,并使用is_array函数检查它是否为数组。如果是数组,则遍历该数组并输出值。 尝试以下代码。

$arr = array(0 => 1,
        array(
            0 => 'a',
            1 => 'b'
        ),
        'c' => '0'
    );
foreach($arr as $key => $value)
{
    if(is_array($value))
    {
        foreach($value as $inner_key => $inner_value)
        {
            echo "<br>";
            echo $inner_value;
        }       
    }
    else
    {
            echo "<br>";
            echo $value;        
    }
}

答案 2 :(得分:1)

我编写了一个函数,该函数获取内部数组的值并以正确的顺序添加它们:

function array_values_recursive(array $array)
{
    $values = array_values($array);

    foreach ($values as $key => $value) {
        if (is_array($value)) {
            $innerValues = array_values_recursive($value);

            if ($innerValues) {
                array_splice($values, $key, 1, $innerValues);
            }
        }
    }

    return $values;
}

示例:

$array = array(
    0 => 1,
    array(
        0 => 'a',
        1 => 'b'
    ),
    'c' => '0'
);

$values = array_values_recursive($array);

echo(implode(PHP_EOL, $values));

将打印:

1
a
b
0

答案 3 :(得分:0)

function flatten($array) {
    // flattened array
    $flat = [];
    // flattening anonymous function 
    $flatten = function ($array) use (&$flatten, &$flat) {
        // loop over an array
        foreach ($array as $item) {
            // if item is array, use flattening function 
            if (is_array($item)) {
                $flatten($item);
            } else {
                // else push item to flattened array
                $flat[] = $item;
            }
        }
    };
    // initial call of flattening function
    $flatten($array);

    // return flattened array
    return $flat;
}

var_dump(flatten([
    0 => 1,
    [
        0 => 'a',
        1 => 'b'
    ],
    'c' => '0'
]));

答案 4 :(得分:-1)

只需使用array_walk_recursive。

$r = [];
array_walk_recursive($arr, function ($e) use (&$r) {
    $r[] = $e;
});