2012-05-31 19 views
0

我想這recunstruct陣列foreach循環關聯數組:重建在PHP

Array 
(
    [0] => Array 
     (
      [ID] => 0 
      [NAME] => 400 
      [QUANTITY] => 12 
     ) 

    [1] => Array 
     (
      [ID] => 0 
      [NAME] => 403 
      [QUANTITY] => 108 
     ) 

    [2] => Array 
     (
      [ID] => 5 
      [NAME] => 403 
      [QUANTITY] => 108 
     ) 
) 

這就是我想要它看起來像:

Array 
(
    [ID] => Array 
     (
      [NAME] => QUANTITY 
      [NAME] => QUANTITY 
     ) 
Array 
(
    [ID] => Array 
     (
      [NAME] => QUANTITY 
     ) 

的代碼我想出了與不能正常工作,該陣列似乎在每個循環中只顯示最後一個條目將被覆蓋:

Array 
(
    [ID] => Array 
     (
      [NAME] => QUANTITY 
     ) 
    [ID] => Array 
     (
      [NAME] => QUANTITY 
     ) 
) 

這是我的代碼:

$result = $sth->fetchAll(PDO::FETCH_ASSOC); 

foreach($result as $key=>$value){ 
     $i = $value["ID"]; 
     $x = $value["NAME"]; 
     $y = $value["QUANTITY"]; 
     $arr[$i] = array($x=>$y);      
    } 

回答

0
foreach($result as $key=>$value){ 
    $i = $value["ID"]; 
    $x = $value["NAME"]; 
    $y = $value["QUANTITY"]; 
    if(!isset($arr[$i])) $arr[$i] = array(); 
    $arr[$i][$x] = $y; 
} 
+0

它的工作就像一個魅力!感謝您的快速回復。 – Kwqubik

0

您不能有多次相同的密鑰。這是不可能的。一個數組必須有一個唯一的鍵。 您可以創建名稱鍵的數組,它看起來就像這樣:

[ID] => Array 
    (
     [NAME] => Array 
       (
        [0] => QUANTITY 
        [1] => QUANTITY 
       ) 
    ) 
0

由於弗拉德說,你不能使用相同的索引名稱...

,不過也許你想是這樣的:

foreach($result as $key=>$value){ 
    $i = $value["ID"]; 
    $x = $value["NAME"]; 
    $y = $value["QUANTITY"]; 

    // here you go: 
    $data = array($x => $y); 
    if (isset($arr[$i]) { 
     $arr[$i] = array_merge($arr[$i], $data); 
    } else { 
     $arr[$i] = $data; 
    } 
} 
0

試試這個代碼:

<?php 

$newArray = array(); 

foreach ($result as $value) 
{ 
    $newArray[$value['id']] = array($value['NAME']=>$value['QUANTITY']); 
} 
0

我想這會有所幫助。考慮你聲明你的數組。

$array = array(0 => array("id" => 0, "Name" => 400, "quantity" =>12), 
       1 => array("id" => 0, "Name" => 403, "quantity" =>108), 
       2 => array("id" => 5, "Name" => 403, "quantity" =>108) 
); 

而你聲明一個沒有價值也沒有構造的新數組。

$newArray = array(); 

現在,試試這段代碼!

foreach($array as $arr => $value) 
{ 
    $id = $value["id"]; 
    $name = $value["Name"]; 
    $quantity = $value["quantity"]; 
    if(count($newArray[$id])>0){ 
     $newArray[$id] = array_merge($newArray[$id],array($name => $quantity)); 
    } else { 
     $newArray[$id] = array($name => $quantity); 
    } 
}