php用键密封多维数组

时间:2014-06-05 12:19:23

标签: php arrays multidimensional-array

我有这个数组

$array =array('a', 'b', array(array('c'), 'd'), 'e', array('f'), 'g');

我希望得到这个结果

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
    [5] => f
    [6] => g
)

我正在使用此功能:

function flatten ($array) {
    $result = array();
    array_walk_recursive($array, function($v, $k) use (&$result) {
        $result[] = $v;
    });
    return $result;
}

我得到了这个结果:

Array
(
    [0] => array('a', 'b', 

    [1] => array(array('c'), 'd'),

    [2] =>  'e', array('f'), 'g')
)

与原始输入数组相同。

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:2)

function flatten($a) {
    if(!is_array($a))
        return array($a);
    return call_user_func_array(
        'array_merge',
        array_map('flatten', $a)
    );
}


$a = array('a', 'b', array(array('c'), 'd'), 'e', array('f'), 'g');
print_r(flatten($a));

给出所需的输出。

http://sandbox.onlinephpfunctions.com/code/d5806a85b31b2bd84985f56916da2d5a5a9b6744

答案 1 :(得分:1)

或者,您也可以使用SPL,尤其是RecursiveIteratorIterator RecursiveArrayIterator。考虑这个例子:

$array = array('a', 'b', array(array('c'), 'd'), 'e', array('f'), 'g');
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($iterator as $value) {
    $data[] = $value;
}
echo '<pre>';
print_r($data);
echo '</pre>';

应该产生相同的结果:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
    [5] => f
    [6] => g
)

答案 2 :(得分:-1)

function return_value($input) {
    $return = '';
    if (is_array($input)){
        foreach($input as $data) $return .= return_value($data);
    }
    else {
        $return .= $input.',';
    }
    return $return;
}

$array = Array ( 
    0 => array('a', 'b'), 
    1 => array(array('c'), 'd'), 
    2 => 'e', array('f'), 'g' 
);

$string = return_value($array);
$string = substr($string, 0, strlen($string)-1);

$new_array = explode(',', $string);