我有这个数组
$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')
)
与原始输入数组相同。
任何帮助将不胜感激
答案 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);