如何获得这种格式?结果应该是动态的:
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);
我哪里错了?如果还有其他方法,请告诉我。
答案 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;
});