2012-05-31 2 views
0

Je suis en train de recunstruct ce tableau avec une boucle foreach:Reconstruire tableaux associatifs en 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 
     ) 
) 

Ce que je veux que ça ressemble à:

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

Le code je suis venu avec ne fonctionne pas correctement, le tableau semble être écrasé sur chaque boucle affichant uniquement la dernière entrée:

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

Cette est mon code:

$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);      
    } 

Répondre

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

Cela a fonctionné comme un charme! Merci pour la réponse rapide. – Kwqubik

0

vous ne pouvez pas avoir la même clé plusieurs fois. c'est impossible. un tableau doit avoir une clé unique. vous pouvez créer un tableau pour la clé de nom et il ressemblera à ceci:

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

Comme Vlad dit que vous ne pouvez pas utiliser le même nom d'index ...

Mais probablement vous voulez quelque chose comme ça :

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

Essayez ce code:

<?php 

$newArray = array(); 

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

Je suppose que cela aiderait. Considérant que vous déclarez votre tableau.

$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) 
); 

Et vous déclarez un nouveau tableau sans valeur ni construction.

$newArray = array(); 

Maintenant, essayez ce code!

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); 
    } 
} 
Questions connexes