2011-07-24 5 views
0

J'ai une liste d'éléments stockés dans un DB et après les avoir demandés, ils sont dans un tableau ($data). Maintenant, il y a environ 200 éléments dans le tableau et chacun d'eux est lui-même un tableau de valeur clé. Chaque élément du tableau de données possède une clé appelée [Acr] et un nom lui est affecté.Manipulation de données de tableau PHP

Maintenant, le problème est que dans ce tableau

Array 
( 
    [0] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => ARR 
      [Valid] => 1 
      [Orig] => 1 
     ) 

    [1] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => ABC 
      [Valid] => 1 
      [Orig] => 1 
     ) 

    [2] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => XYZ 
      [Valid] => 1 
      [Orig] => 1 
     ) 
    ... 

Il y a des éléments qui ont le même Acr mais sont des éléments sous du premier élément avec ce Acr. Donc, par exemple, il y a 10 autres articles dans $data qui ont l'Acr comme ARR et je veux ajouter ces sous-éléments dans l'élément de tableau original (alias le premier) avec cette valeur Acr sous la clé appelée sub. Donc, après itération, ça fait ça.

Array 
( 
    [0] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => ABC 
      [Valid] => 1 
      [Orig] => 1 
     ) 

    ..... 

    [14] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => ARR 
      [Valid] => 1 
      [Orig] => 1 
      [Sub] => 
        [0] => Array 
         (
          [ID] => 23 
          [Name] => Sub Name Here 
          [Acr] => ARR 
          [Valid] => 1 
          [Orig] => 0 
         ) 

        [1] => Array 
         (
          [ID] => 24 
          [Name] => Sub Name Here 
          [Acr] => ARR 
          [Valid] => 0 
          [Orig] => 1 
         ) 
     ) 

     ... 

Maintenant je ne sais pas comment faire. Aussi, tout est trié donc quand vous voyez le premier ARR tous les sous ARR sont juste en dessous d'eux et il y a seulement environ 5 catégories originales qui ont des sous-éléments, donc s'il y a un moyen de le faire en sachant lesquels ajouter, cela serait sois super. Je ne suis pas sûr si j'ai expliqué le problème correctement, donc si vous avez des questions s'il vous plaît demandez-moi et je vous répondrai dans les minutes qui suivent.

Merci

+1

Vous avez clairement expliqué la structure, mais quelle est votre question? Comment espérez-vous manipuler ou accéder à ceux-ci? –

+0

Dans votre tableau d'origine, toutes les touches sont numériques. Serait-ce un problème, que dans le tableau manipulé toutes les touches sont alphanumériques? – rabudde

+0

Salut, étant donné que le tableau original s'appelle 'data' je cherche le code qui itère dans le tableau et crée un nouveau tableau appelé quelquechose avec cette forme où les sous-éléments sont ajoutés le maître de cette clé' Acr'? Est-ce que cela répond à votre question? – Kartik

Répondre

2

Pour le cas, que les touches alphanumériques sont acceptées dans le tableau manipulé:

$new = array(); 
foreach ($array as $entry) { 
    if (!array_key_exists($entry['Acr'], $new)) { 
    $entry['Sub'] = array(); 
    $new[$entry['Acr']] = $entry; 
    } else $new[$entry['Acr']]['Sub'][] = $entry; 
} 
+0

Cela l'a fait! Merci beaucoup! – Kartik

1

Une tentative d'une petite fonction qui peut le faire, le tester et laissez-moi savoir si fonctionne

$newRecord = array(); 
foreach($records as $record){ 
    # if the Acr already exists in a primary record, 
    # insert this record as a Sub-record. 
    if(array_key_exists($record['Acr'], $newRecord)){ 
     $newRecord[$record['Acr']]['Sub'][] = $record; 
    # else insert it as a primary record 
    } else { 
     $newRecord[$record['Acr']] = $record; 
    } 
}