簡體   English   中英

將SQL PHP數組添加到現有數組

[英]Add SQL PHP array to an already existing array

我有兩個數據庫表。 一個包含市場,另一個包含市場的位置。 市場可以具有多個位置,兩個表由MarketplaceID聯接。 我需要查詢市場,將其轉換為數組,並在foreach或同時,將位置作為數組添加到市場。 這是兩個json響應的全部。 但是,我的目標是將數據組合在一起,並得到一個json響應,其中位置位於市場json數據內,稱為“ Locations”。 最終是一個市場,其中“市場”是父級,“位置”是子級。

代碼1(表1查詢):

$sql = "SELECT * FROM Marketplaces WHERE Status = 1";
$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)){   
  foreach($row as $key => $value){
      $arr[$key] = $value;
  }
  $main_arr[] = $arr;
}
return $main_arr;

結果:

[{"MarketplaceID":"1","AccountID":"0","BusinessName":"Mike's Pub","BusinessType":"1","Status":"1","CreationDate":"0000-00-00 00:00:00"}]

代碼2(表2查詢):

$sql = "SELECT * FROM Locations WHERE MarketplaceID = 1";
$results = mysql_query($sql);

while($row = mysql_fetch_assoc($results)){
  foreach($row as $key => $value){
    $arr[$key]=$value;
  }
  $main_arr[] = $arr;
}

結果:

[{"LocationID":"1","MarketplaceID":"1","Address1":"5055 Business Center Drive","Address2":"Suite 100","City":"San Francisco","CA":"1","Zip":"90210","Phone1":"(555) 555-555","Phone2":"(555) 555-5555","EmailAddress":"email@msn.com","StoreNumber":"200"},{"LocationID":"2","MarketplaceID":"1","Address1":"112 Street Court","Address2":"","City":"Los Angeles","StateID":"2","Zip":"90210","Phone1":"(555) 555-6666","Phone2":"","EmailAddress":"email@gmail.com","StoreNumber":"300"}]

首先,放下

  foreach($row as $key => $value){
      $arr[$key] = $value;
  }

除了和$arr = $row一樣,它什么也不做; 實際上,它還有其他功能-由於未定義$arr因此會產生警告。

編輯現在的答案已更新,因為初始查詢已從WHERE MarketplaceID=1更改為WHERE Status = 1"

$main_arr=array();
$sql = "SELECT * FROM Marketplaces WHERE Status = 1";
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){   
  $row['locations']=array();
  $sql2 = "SELECT * FROM Locations WHERE MarketplaceID = ".$row['MarketplaceID'];
  $results2 = mysql_query($sql2);
  while($row2 = mysql_fetch_assoc($results2)){
      $row['locations'][]=$row2;
  }
  $main_arr[] = $row; 
}

// print_r($main_arr); and view page source to read, rather than a JSON string

實際上,我的做法會稍有不同,這樣我的陣列就不會弄亂Marketplace中的位置,但仍將它們保持在一起,如下所示

while($row = mysql_fetch_assoc($result)){   
  $thisrow=array('marketplace'=>$row, 'locations'=>array());
  $sql2 = "SELECT * FROM Locations WHERE MarketplaceID = ".$row['MarketplaceID'];
  $results2 = mysql_query($sql2);
  while($row2 = mysql_fetch_assoc($results2)){
      $thisrow['locations'][]=$row2;
  }
  $main_arr[] = $thisrow; 
}

所以對象是

{ 
    "marketplace": {"MarketplaceID": 1, "BusinessName": "Fred Bloggs", ... }
    "locations": [
        {"LocationId": 1, "Address1": "Some address"},
        {"LocationId": 2, "Address1": "Some address"}
    ]
}

如果我正確閱讀,則您的第一個數組是容納Marketplace 1數據的一維數組,而第二個數組是多維數組,其中父數組中的每個元素都包含一個子數組,該子數組包含有關單個位置的信息。 如果要將第二個數組放在第一個數組中,請嘗試像這樣嵌套循環:

$sql = "SELECT * FROM Marketplaces WHERE MarketplaceID = 1";
$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)){   

  foreach($row as $key => $value){
  $arr[$key] = $value;

}

$sql2 = "SELECT * FROM Locations WHERE MarketplaceID = 1";
$results2 = mysql_query($sql2);

while($row2 = mysql_fetch_assoc($results2)){

  foreach($row2 as $key => $value){
  $arr2[$key]=$value;

}

$arr['locations'] = $arr2;

$main_arr = $arr;

}

這將創建一個臨時數組$ arr2,該數組容納您的位置數據,然后將其存儲在$ arr ['locations']中。 在代碼末尾,您要添加到$ main_arr的$ arr應該包含以下元素:“ MarketplaceID”,“ AccountID”,“ BusinessName”,“ BusinessType”,“ Status”,“ CreationDate”和“ location” ”和“ location”應該是一個包含元素的數組,這些元素包含從數據庫中提取的位置信息。

希望這能回答您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM