2016-05-18 18 views
1

PHPで配列にキー値のペアを追加しようとしています。私は配列をエコーするとPHPの配列にキー値のペアを追加する

は、私は値が

echo "Key = " . $key . "| Value = " . $value; 

Key = area_id| Value = 4000001Key = area_title| Value = Region 

すべての良い取得します。

しかし、これらのキー値のペアを配列 'main'に追加しようとすると、配列は空ですか?

以下のように:キーと値の場合

   $main = array(); 

       function recursive($array){ 
        foreach($array as $key => $value){ 
         //If $value is an array. 
         if(is_array($value)){ 
          //We need to loop through it. 
          recursive($value); 
         } else{ 
          //It is not an array, so print it out. 
          //$main[$key] = array (
          // $key = $value 
          //); 

          //echo "Key = " . $key . "| Value = " . $value; 

          $main[$key] = $value; 
         } 
        } 
       } 

私はそれらをエコーすることができますように、なぜ彼らは、アレイに追加されていない、がありますか?

+0

に動作しますが、 '$のarray'コンテンツ – RomanPerekhrest

答えて

4

関数に書かれているとおり、関数内の変数$mainはその関数に対してローカルです。そのローカル変数に対する変更は、関数外にある$mainには影響しません。

は、あなたの関数の最初の行としてこれを追加します。

global $main; 

これはあなたの関数がグローバル変数を変更することができます。

+0

MMMMを表示を追加しましたか? – frobak

+0

@frobak:期待どおりに動作します。 '$ main'を他の関数の中で定義していませんか?インデントは、あなたが別の機能のように見えるようにします。 – AbraCadaver

0

$main変数がグローバルスコープで定義されており、関数スコープでは定義されていないため、関数が機能しません。 1つの方法は、global $mainを使用して$mainを関数に導入することです。

もう1つは、betterです。アプローチは結果配列を返すように関数を変更することです。

$array = array(
    'Batman' => 'Robin', 
    'Fruits' => array(
     'Apple', 'Strawberry' 
    ), 
    'Sports' => array(
     'collective' => 'Basketball', 
     'one man show' => 'Running' 
    ) 
); 

$main = array(); 

function recursive($source){ 
    $result = array(); 
    foreach($source as $key => $value){ 
     //If $value is an array. 
     if(is_array($value)){ 
      //We need to loop through it. 
      $result = array_merge($result, recursive($value)); 
     } else{ 
      $result[$key] = $value; 
     } 
    } 

    return $result; 
} 

var_dump(recursive($array)); 
0

ありがとうございました。私はそれを複雑にする以上の方法だったと思う。

各アレイから2つの値を出力するだけでした。値が別の配列だった場合は、その値を取得してください。まだ空の配列を返す、ということ

私が発見し、修正された非常に簡単で、以下の機能を、そして御馳走

  // recursive function to print areas grouped with their children 
      function RecursiveWrite($array) { 
       foreach ($array as $vals) { 

        echo "<div class='row area_level_rows area_level_" . $vals['area_level'] . "'>"; 
          echo "<div class='col-md-12'>" . $vals['area_name'] . "</div>"; 
        echo "</div>";     

        if(!empty($vals['children'])) { 
        RecursiveWrite($vals['children']); 
        } 
       } 
      } 

      RecursiveWrite($area_tree); 
関連する問題