2016-08-07 6 views
0

私はforeachループを使って複数の配列をループし、各配列のID値で決まる2つのグループに分けてエコーします。最終的にテーブルに。複数の配列とグループ値が各配列のID値で決まります

だから、例えば次のように私は与えられた2次元配列を持っています(私はわずか3例としてを使用しているが、現実にはもっとあるでしょう)

Array 
(
    [results] => Array 
     (

      [numbpeople] => 3 
      [people] => Array 
       (
        [0] => Array 
         (
          [name] => bert 
          [mainId] => 2 
          [beens] => 0 
          [coins] => 8 
          [total] => 3 
          [ammount] => 2 
          [place] => 15 
          [type] => 0 

         ) 

        [1] => Array 
         (
          [name] => bungle 
          [mainId] => 1 
          [beens] => 0 
          [coins] => 4 
          [total] => 0 
          [ammount] => 10 
          [place] => 13 
          [type] => 0 

         ) 
        [2] => Array 
         (
          [name] => fred 
          [mainId] => 2 
          [beens] => 0 
          [coins] => 3 
          [total] => 1 
          [ammount] => 8 
          [place] => 11 
          [type] => 0 

         ) 

       ) 

      ) 

    ) 

私は、次のコードを試してみたが、それは動作しません。その意図された方法。

//foreach ($data['results']['people'] as $pValue) { 
foreach ($data['results']['people'] as $Key => $pValue) { 
$numPeople = $data["results"]["numbpeople"]; //[$i]; 

    if($numPeople>-1) 
    { 
     $MainId1=""; 
     $MainId2=""; 

     // set up header 
     echo "<strong>People:<br>name, beens, coins, total.</strong><br>"; 
     echo "<br>"; 

     // calculate who's got what? 
     $i=0;  
     while($i<$numPeople) 
     { 
       $pname[$i]=$pValue["name"][$i]; 
       $pmainId[$i]=$pValue["mainId"][$i]; 
       $pbeens[$i]=$pValue["beens"][$i]; 
       $pcoins[$i]=$pValue["coins"][$i]; 
       $ptotal[$i]=$pValue["total"][$i]; 
       if(!stristr($pValue["mainId"],"1") && !stristr($pValue["mainId"],"2")) { 


        if($pmainId[$i]!=$MainId1 && $MainId1=="") { 
         $p1Name=$pname[$i];   // people1 name 
         $p1Beens=$pbeens[$i];  // people1 beens 
         $p1Coins=$pcoins[$i];  // people1 coins 
         $p1Total=$ptotal[$i];  // people1 total 
        } 
        if($pmainId[$i]!=$MainId1 && $MainId1!="" && $MainId2=="") { 
         $p2Name=$pname[$i];   // people2 name 
         $p2Beens=$pbeens[$i];  // people2 beens 
         $p2Coins=$pcoins[$i];  // people2 coins 
         $p2Total=$ptotal[$i];  // people2 total 
        } 

        // Id 
        if($pmainId[$i]!=$MainId1 && $MainId1=="") { 
         $MainId1=$pmainId[$i]; 
        } 
        if($pmainId[$i]!=$MainId1 && $MainId1!="" && $MainId2=="") { 
         $MainId2=$pmainId[$i]; 
        }  
       } else { 
        $MainId1="1"; 
        $MainId2="2"; 
       } 

      // output people ? 

       echo $i.". -> ".$p1Name[$i].", ".$p1Beens[$i].", ".$p1Coins[$i].", ".$p1Total[$i]; 
       // 1   bungle    0     4     0 
       echo "<br>"; 
       echo $i.". -> ".$p2Name[$i].", ".$p2Beens[$i].", ".$p2Coins[$i].", ".$p2Total[$i]; 
       // 1    bert    0     8     3 
       // 2    fred    0     3     1 
       echo "<br>"; 
       echo $MainId1, $MainId2; 
       //  1   2 
       echo "<br>"; 


      $i++; 
     } 

       }else { 

       echo "No people"; 
     } 
    } 

さらに洗練されたソリューションが非常に役立ちます。

+0

そして、何が機能していませんか? –

+0

与えられたサンプル入力の出力として取得したいデータ構造を指定してください。注意:3つのエントリの配列が続く場合、サンプル入力の 'numbpeople'が2であることは奇妙です。その違いの意味は何ですか? – trincot

+0

申し訳ありませんタイプミスが今すぐに修正されました – Renny

答えて

0

コードを見た後にいくつかのアドバイス:

  • 次は私の答えは、配列は、配列にseparetedことができる方法を示し

ビューから別のロジックにしてみてくださいを表示するためにそれを送信する前にデータを準備しますby ID:

$people=$results["results"]["people"]; 
$result=[]; 
$count=count($people);// i don't need special numbpeople in array 

for ($i=0; $i<$count; $i++){ 

    $id=$people[$i]['mainId']; 

    if (!isset($result[$id])) 
    $result[$id]=[];//create new array for this id 

    $result[$id][]=$people[$i]; //add people to this collection 

} 

上記のループの結果は、この構造体ure:

[ 
1 => [ [peopley],[peoplex] ] 
2 => [ [peoplez],[peoplew] ] 
.... 
] 

この構造体はmainIdによってグループ化されています。構造上から人を表示する方法

$size=count($result) 
for ($i=0;$i<$size; $i++){ 

    //loop on groups 

    $peoples=$result[$i];//array with people in this group 
    $groupSize=count($peoples); 

    for ($j=0;$j<$groupSize; $j++){ 

     //loop in group 
     echo $peoples[$j]["name"];//example show name 
    } 
} 
+0

@レニー私はここでコードを荒らし、それをテストしていない、私は忘れてしまった)。コードが修正されました。それを確認してください。 –

+0

これは標準のPHP配列です$ arr = []は$ arr = array()と同じです。構文エラーがある場合はarray()に変更しますが、非常に古いPHPが必要です。 –

+0

私には、コードの最初の部分を変更するvar_dumpを与えてください –

関連する問題