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。1 つはメイン スクリプト内にあり、もう 1 つは関数内にあります。おそらく最も簡単な解決策は、参照を介して渡すことです。

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 に答える