2017-08-10 79 views
1

我想我會需要某種多維數組。我只是不知道如何以一種簡單易懂的格式來獲取它。基本上我有一堆發票去特定的公園。我想要的最終結果是在單個公園上顯示多張發票的公園,所以我可以輕鬆地循環。我有多個SQL問題得到變量,但我得到了它歸結爲這樣:PHP - 將一個值與多個值配對的最佳方法?

  $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) 

記住...這是完全可能的發票是「亂序」在它的輸出,所以如果突然不同號碼之間出現了......我基本上不能依靠簡單的0,1,2,3系統來配對。

我相信有一個簡單的方法來做到這一點,我只是不能爲我的生活弄明白。

+0

你可以使用'sql group by'和'concat'函數。 https://stackoverflow.com/questions/149772/how-to-use-group-by-to-concatenate-strings-in-mysql – Keloo

+0

即使他們在多個不同的表?我必須建立一個從INVOICE到表格應用程序的關聯,然後鏈接到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

我甚至不會開始如何在一行代碼中工作。我在這裏過於複雜,只用一行代碼來替代我討厭的醜陋代碼。非常感謝你。 – sblumberg

+0

我應該更好地解釋它...我已經更新了答案。 –

相關問題