2012-05-31 2 views
0

Я пытаюсь recunstruct этого массива с помощью цикла Еогеаспа:восстанавливающие ассоциативные массивов в 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); 
    } 
} 
Смежные вопросы