2017-01-17 7 views
1

なぜforeachが配列からの最初の値を返すのか分かりません。Foreachは配列からの最初の値を返すだけです

function __EachReturn($Array){ 
    foreach($Array as $Key=>$Arr){ 
     $List = $Arr; 
    } 
    return $List; 
} 

これは私の完全な機能である:私はやったので、何

function Returnstyled($Style){ 
    $Styled = array(); 
    foreach($Style as $Key=>$Items){ 
      switch($Key){ 
       case 'CSS': 
       foreach($Items as $Item){ 
         $Styled[] = sprintf('<link rel="%s" href="%s" type="%s">',$Item['rel'],$Item['href'],$Item['type']); 
         } 
       break; 
       case 'JS': 
       foreach($Items as $Item){ 
         $Styled[] = sprintf('<script src="%s" integrity="%s" crossorigin="%s"></script>',$Item['src'],$Item['integrity'],$Item['crossorigin']); 
       } 
       break; 
     } 
    } 
    return $Styled; 
} 

:私はこのように使用しています前に

// Styled Function 
function Returnstyled($Style){ 
    $Styled = array(); 
    function __EachReturn($Array){ 
     foreach($Array as $Key=>$Arr){ 
      $List = $Arr; 
     } 
     return $List; 
    } 

    foreach($Style as $Key=>$Items){ 
     $Items = __EachReturn($Items); 
      switch($Key){ 
       case 'CSS': 
         $Styled[] = sprintf('<link rel="%s" href="%s" type="%s">',$Items['rel'],$Items['href'],$Items['type']); 
       break; 
       case 'JS': 
         $Styled[] = sprintf('<script src="%s" integrity="%s" crossorigin="%s"></script>',$Items['src'],$Items['integrity'],$Items['crossorigin']); 
       break; 
     } 
    } 
    return $Styled; 
} 

。私はforeachswitch case couple of timeの中に使用したくないので、入れ子関数を生成しようとしています。なぜなら、その中にもう一つの関数を作成することです。EeachReturnしかし、これは配列からの最初の返りです。

戻り配列は完全でなければなりません。

+0

'foreach'ループを実行するたびに' $ List'の値を上書きしています。 '$ List'を配列として宣言し、' foreach'で '$ List [] = $ Arr;'を使う必要があります。 – roberto06

+1

まだ、私は配列を...配列に変換するこの関数のポイントを理解していません。 – roberto06

+0

その機能はなぜですか、あなたはforeachを直接使うことができます –

答えて

4

arrayで保管して、最後に配列を返す:

function __EachReturn($Array){ 
$List=array(); 
    foreach($Array as $Key=>$Arr){ 
     $List[] = $Arr;//change is made here use array to store all values 
    } 
    return $List;//return the array. 
} 

UPDATE:私はこの

からの一部のように使用しています前に

を見ますあなたの質問、私はあなたの機能を使用するように提案する__EachReturnこのように:

function __EachReturn($Key,$Array){ 
    $Styled=array(); 
     foreach($Array as $key=>$Items){ 
      switch($Key){ 
       case 'CSS': 
         $Styled[] = sprintf('<link rel="%s" href="%s" type="%s">',$Items['rel'],$Items['href'],$Items['type']); 
       break; 
       case 'JS': 
         $Styled[] = sprintf('<script src="%s" integrity="%s" crossorigin="%s"></script>',$Items['src'],$Items['integrity'],$Items['crossorigin']); 
       break; 
     } 
    } 
    return $Styled; 
} 
$ItemsList=array(); 
foreach($Style as $Key=>$Items){ 
     $ItemsList[] = __EachReturn($Key,$Items);//$ItemsList will consist all the script/link .... 
} 
+0

完全なコードで私の質問を更新しました。これは私がやろうとしていることです。 –

+0

@MuhammadHamzaNisar関数を使わないことをお勧めします。あなたは '$ Items'を直接使うことができます。スイッチのキーを動的にしましょう。ここでは「foreach」は必要ありません。 –

+0

私はそれをしなかった。だから、私は 'foreach'をforeachを削除すると' error''、 'rel、href'のような定義されていないインデックスを返します。 –

1

配列から最初の値を戻していないため、最後の値が返されています。

function __EachReturn($Array){ 
    foreach($Array as $Key=>$Arr){ 
     $List = $Arr; //here $List is always getting overwritten by $Arr 
    } 
    return $List; //when loop finishes, final $Arr is in $List and it is returned 
} 

すべての値が返されるように、@Suchitが示唆するように配列を格納します。

1

あなたは配列にforeachのデータをキャプチャする必要が

function __EachReturn($Array){ 
    $List = []; 
    foreach($Array as $Key=>$Arr){ 
     $List[] = $Arr; // your loop record was replacing in every loop. now will be captured in array. 
    } 
    return $List; 
} 

、これを試してみてください。

関連する問題