2012-03-07 51 views
0
$db = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); 

      $items = 'SELECT items FROM menus'; 
      $itemLink = 'SELECT itemLink FROM menus'; 

      $itemQuery = $db->query($items); 
      $linkQuery = $db->query($itemLink); 

      $fetchItem = $itemQuery->fetch(PDO::FETCH_ASSOC); 
      $fetchLink = $linkQuery->fetch(PDO::FETCH_ASSOC); 

      $merged = array_merge($fetchItem,$fetchLink); 

      foreach($merged as $key=>$value){ 
       echo "${key} => ${value} <br />"; 
      } 

這就是它看起來像在數據庫:這個PHP的foreach代碼有什麼問題? (合併陣列)

items |itemLink 
---------------------- 
Kill Bill|Kill Bill link 
Preman |Preman link 

所以,預期的輸出,或者至少是我想到的一定是這樣的:

items => Kill Bill 
    items => Preman 
    itemLink => Kill Bill Link 
    itemLink => Preman Link 

但從代碼的結果輸出是這樣的:

items => Kill Bill 
itemLink => Kill Bill Link 

它缺少其他項目和itemLink

那麼,如何實現我想要的輸出?

回答

2
 $fetchItem = $itemQuery->fetch(PDO::FETCH_ASSOC); 
     $fetchLink = $linkQuery->fetch(PDO::FETCH_ASSOC); 

這僅取每個結果集的第一行。您需要fetchAll

 $fetchItem = $itemQuery->fetchAll(PDO::FETCH_ASSOC); 
     $fetchLink = $linkQuery->fetchAll(PDO::FETCH_ASSOC); 

並調整其餘代碼。

 foreach($merged as $entry) { 
      foreach($entry as $key => $value) { 
      echo "${key} => ${value} <br />"; 
      } 
     } 

編輯:fetch呼叫只檢索結果集的第一行,而fetchAll解析完整結果集到一個數組。因此,對象是這樣算賬:

Array(
    [0] => { 'items' => 'Kill Bill' }, 
    [1] => { 'items' => 'Preman' } 
) 
Array(
    [0] => { 'itemLink' => 'Kill Bill' }, 
    [1] => { 'itemLink' => 'Preman' } 
) 

array_merge串連兩個陣列以下幾點:

Array(
    [0] => { 'items' => 'Kill Bill' }, 
    [1] => { 'items' => 'Preman' }, 
    [2] => { 'itemLink' => 'Kill Bill' }, 
    [3] => { 'itemLink' => 'Preman' } 
) 

所以我們現在有一個二維數組。要遍歷我們需要的值,首先要選擇每個$entry,這在foreach外部完成,並且可以在訪問內部foreach中的鍵/值結構。

如其它評論指出:如果你想保留itemsitemLink之間的連接,你應該首先查詢更改爲

SELECT items, itemLink FROM menus 
+0

現在,它給我這個: 0 =>陣列 1 =>陣列 2 =>陣列 3 =>陣列 4 =>陣列 5 =>陣列 – 2012-03-07 16:31:07

+0

@MouseHello沒有你調整'foreach'像我說? – Sirko 2012-03-07 16:31:57

+0

對不起,沒有注意到這個foreach。它現在有效,它是如何工作的? – 2012-03-07 16:35:37

0

您可以使用簡單的array_combine()功能做什麼你現在正在嘗試做。

$merged = array_combine($fetchItem, $fetchLink); 

這將使所有項目從$fetchItem作爲鍵的項目從$fetchLink

+0

儘管將查詢更改爲「SELECT items,itemLink FROM menus」,但這兩個值之間的鏈接將更容易。 – Sirko 2012-03-07 16:34:48