2016-08-24 11 views
0

非常に簡単なことに取り組んでいます。再帰を使用して新しい配列を作成するときに「スキップ」する方法

私は再帰関数を使用して既存の配列をループすることによって新しい配列を作成していますが、新しい配列にスティックする値を取得できないようです。最終的には、この機能はもう少し複雑になりますが、今のところ私はいくつかの助けが必要です。

私はこれをうまく動作させるためにさまざまな方法を試しましたが、今は負けています。私はこの行を変更した場合

はここに... ...、

recursive($value); // Why can't I just call the recursive function here? 

ようになり、新しい配列が満たされることは決してありません

function recursive($array) { 

    $newArray = array(); 

    foreach($array as $key => $value) { 

     if(is_array($value)){ 
      recursive($value);        
     }else{ 
      $newArray[] = $value; 
     } 

    } 

    return $newArray; 

} 

私のPHP関数

です...しかし。 ..

私の目標は、値だけでフラットな配列を作成することを除いて、すべて正常に動作します。

私の質問は、再帰関数を再度呼び出すために新しい配列値を設定する必要があるのはなぜですか?理想的には、値が配列の場合は新しい配列値の設定をスキップし、元の配列にループを続けるだけです。

説明に役立つどんな助けになるでしょう!配列をマージする

+0

[array merge](http://php.net/manual/en/function.array-merge.php)を読んでみてください。 – JohannesB

+0

私はコメントの代わりに答えを作ったはずだと思います – JohannesB

+0

すてきな答えをありがとう! – VIDesignz

答えて

2

使用array_merge

function recursive($array) { 

    $newArray = array(); 

    foreach($array as $key => $value) { 

     if(is_array($value)){ 
      $newArray = array_merge($newArray, recursive($value));        
     }else{ 
      $newArray[] = $value; 
     } 

    } 

    return $newArray; 

} 

...またはあなたが使用することができspecial operator

function recursive($array, &$newArray = null) { 

    if (!$newArray) { 
     $newArray = array(); 
    } 

    foreach($array as $key => $value) { 

     if(is_array($value)){ 
      recursive($value, $newArray);        
     }else{ 
      $newArray[] = $value; 
     } 

    } 

    return $newArray; 
} 
+0

関連する質問がありますか? $ newArrayが各サイクルで返されると、それは常に他のサイクルの合計ですか?私はちょうど戻りが行われたときに実際に起こっていることにちょっと混乱しています。 – VIDesignz

+0

はい、それは常に他のすべてのサイクルの合計です。 'array_merge' http://php.net/array_mergeについて読んだことがありますか? – ofca

1

使用array_merge()recursive($value);と$ NEWARRAY

$newArray = array_merge($newArray,recursive($value)); 

から返されたあなたは$newArrayの前の値が横ばいであったとして$newArrayは、この後に平らであることを保証することができ、かつrecursiveは常にフラットな配列を返します。したがって、両方の組み合わせはフラットな配列でなければなりません。

1

あなたが「AREN:

function recursive($array) { 

    $newArray = array(); 

    foreach($array as $key => $value) { 

     if(is_array($value)){ 
      $newArray += recursive($value);        
     }else{ 
      $newArray[] = $value; 
     } 

    } 

    return $newArray; 

} 
...または、このような variable by referenceを渡しますあなたの再帰関数からの復帰で何かをする。これを試してみてください:

function recursive($array) { 

    $newArray = array(); 

    foreach($array as $key => $value) { 

     if(is_array($value)){ 
      // This is what was modified 
      $newArray = array_merge($newArray, recursive($value));        
     }else{ 
      $newArray[] = $value; 
     } 

    } 

    return $newArray; 

} 
関連する問題