2017-08-10 11 views
1

私は何らかの並べ替えの多次元配列が必要だと思った。私はちょうど理解しやすい形式でそれを取得する方法を知りません。基本的に、特定の公園に行くための請求書がたくさんあります。私が望む最終結果は、1つの公園に複数の請求書を表示している公園なので、簡単にループすることができます。 I変数を取得するために、複数のSQL質問があるが、私はこれにそれを降りて:これは私の出力であるすべての終わりにPHP - 1つの値と複数の値をペアにする最も良い方法は?

  $sql = "SELECT * FROM INVOICE WHERE ID=$ids[$i]"; 
      $result = $conn->query($sql); 

      if ($result->num_rows > 0) { 
       $row = $result->fetch_assoc(); 
       //invoice variables go here 
       //row is invoices 
       $invoiceapplication = $row['APPLICATION']; 
       $invoiceid = $row['ID']; 
       $invoicedate = $row['DATE']; 
       $late = $row['LATE']; 
       $amountowed = ''; 
       $amountowed = $row['AMOUNTOWED']; 
       $originalamountowed = $row['AMOUNTOWED']; 


       //grabbing application park id to get all the parks. 
       $sqlapplication = "SELECT * FROM APPLICATION WHERE ID=$invoiceapplication"; 
       $resultapplication = $conn->query($sqlapplication); 
       if($resultapplication->num_rows > 0){ 
        $rowapplication = $resultapplication->fetch_assoc(); 
        //rowapplication is applications 
        //application variables here 
        $applicationparkid = $rowapplication['MOBILEPARK']; 
        //end app variables. 
       } 
       //finished grabbing application park id to get all the parks. 
       echo $invoiceid.' is park '.$applicationparkid.'<br>'; 

       if(in_array($applicationparkid,$allparkarray)){ 
        //if already contained in the allparkarray 

       } else { 
        array_push($allparkarray,$applicationparkid); 
       } 


      } 
      $i++; 
     } 

:理想的には

901 is park 38 
1362 is park 38 
1595 is park 38 
1825 is park 38 
2093 is park 38 
4766 is park 38 
17018 is park 61 
17011 is park 66 
17015 is park 66 
17014 is park 66 
17013 is park 66 
17012 is park 66 

...私が持っていると思います出力として、このような多次元配列:

38 => (901,1362,1595,1825,2093,4766) 
61 => (17018) 
66 => (17011,17015,17014,17013,17012) 

それは突然の異なる数の間で現れので、もし、その出力における「秩序の外」であると請求書には全く可能です...覚えておいてください... I基本的に 簡単な0,1,2,3システムに依存してそれをペアにすることはできません。

これを行う簡単な方法があると確信しています。私の人生のためにはそれを理解できません。

+0

いくつかの 'concat'関数とともに' sql group by'を使うことができます。 https://stackoverflow.com/questions/149772/how-to-use-group-by-to-concatenate-strings-in-mysql – Keloo

+0

複数の異なるテーブルにある場合でも、私はINVOICEからテーブルAPPLICATIONへのアソシエーションを作る必要があります。これはPARKテーブルにリンクします。 – sblumberg

+0

[Little Bobby Tables](http://bobby-tables.com/)がこのコードを承認しています。 – bishop

答えて

1

の代わりに、配列にそれを追加...

if(in_array($applicationparkid,$allparkarray)){ 
    //if already contained in the allparkarray 

} else { 
    array_push($allparkarray,$applicationparkid); 
} 

あなただけ書くことができます...

$allparkarray[$applicationparkid][]=$invoiceid; 

$allparkarray[$applicationparkid]だけ値が起こっされるポイントを設定しますに追加する。したがって、$ applicationparkidは値を関連付けるために使用されるケットです。 []ビットは、配列の最後の要素に値を追加するだけです。それとも初めての新しい配列です。

+0

私は、これがどのようにして一行のコードで動作するのかを始めるつもりもありません。私はここですべてをオーバーコンプリートしています。あなたは私の厄介なコードを置き換えるコードを1行だけ持ってきてくれています。どうもありがとうございました。 – sblumberg

+0

私はそれをもう少し説明していたはずです...私は答えを更新しました。 –

関連する問題