1

因此,我正在尝试创建一个递归 flattenArray 函数,该函数将采用一个数组(具有未知数量的元素和子数组(可能有更多子数组)。

这是我遇到问题的PHP代码:

<?php
// Javascript Array [ [1,2,3],[[[4]]],[5],[6],[[7,8,[9]]] ]
// Equivalent PHP Array:   
$sampleArray = Array(
    Array(1,2,3),
    Array(
        Array(
            Array(4)
        )
    ),
    Array(5),
    Array(6),
    Array(
        Array(
            7,
            8,
            Array(9)
        )
    )
);

$finishedArray = Array();

function flattenArray($array){
    foreach ($array as $key => $value) {
        if(is_array($value)){
            flattenArray($value);
        } else {
            $finishedArray[] = $value;
            echo "<br> ".$value." | ";
            print_r($finishedArray);
        }
    }
}

flattenArray($sampleArray);

echo "<br><br>FinishedArray: <br>";
print_r($finishedArray);
?>

我得到这个输出:

1 | Array ( [0] => 1 ) 
2 | Array ( [0] => 1 [1] => 2 ) 
3 | Array ( [0] => 1 [1] => 2 [2] => 3 ) 
4 | Array ( [0] => 4 ) 
5 | Array ( [0] => 5 ) 
6 | Array ( [0] => 6 ) 
7 | Array ( [0] => 7 ) 
8 | Array ( [0] => 7 [1] => 8 ) 
9 | Array ( [0] => 9 ) 

FinishedArray: 
Array ( )

由于某种原因,它重置了 $finishedArray。我在这里做错了什么?

4

1 回答 1

2

似乎您需要阅读variable scope。调用了 2 个变量$finishedArray- 一个在主脚本中,另一个在函数中。可能最简单的解决方案是通过引用传递它:

function flattenArray($array, &$finishedArray){
    foreach ($array as $key => $value) {
        if(is_array($value)){
            flattenArray($value, $finishedArray);
        } else {
            $finishedArray[] = $value;
        }
    }
}

$finishedArray = Array();
flattenArray($sampleArray, $finishedArray);
于 2013-06-26T03:54:05.927 回答