2017-08-10 15 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

我应该更好地解释它...我已经更新了答案。 –

相关问题