2010-07-05 6 views
0

Ok ... Je déteste les tableaux ... Je ne les comprends pas et je n'aime pas travailler avec eux ... mais je travaille sur un projet où je n'ai aucun contrôle sur les données que je tire , mais besoin d'un moyen de faire le tri dans un format que je peux manipuler ...Manipulez et bouclez les tableaux PHP imbriqués

Ainsi, les données ressemble à quelque chose comme ceci:

$arr = Array ( 
[1] => Array ([December] => a date here [December (2)] => a location here... [December (3)] => an event here...) 
[2] => Array ([December] => a date here [December (2)] => a location here... [December (3)] => an event here...) 
[3] => Array ([December] => a date here [December (2)] => a location here... [December (3)] => an event here...) 
[4] => Array ([December] => a date here [December (2)] => a location here... [December (3)] => an event here...) 
[5] => Array ([December] => a date here [December (2)] => a location here... [December (3)] => an event here...) 
) 

d'abord, je dois changer « Décembre », « Décembre (2) '&' Décembre (3) 'à' Date ',' Emplacement '&' Événement '...

Ensuite, j'ai besoin d'un moyen de référencer les nouvelles clés dans chaque tableau dans une boucle foreach ou similaire que je peux ensuite insérer dans une base de données?

Quelque chose comme:

$arr[1][Date]; 

mais je suppose que ARR $ [1] devrait être quelque chose comme $ arr [$ i] ...?

Quelqu'un peut-il m'aider s'il vous plaît? Il serait très apprécié ... Je l'ai essayer d'obtenir ce droit pendant un certain temps ...

+2

Vous feriez mieux de vous habituer aux tableaux, ils sont le cœur, l'âme, le pain et le beurre de PHP. – deceze

+1

J'ai changé le titre puisque votre question n'a rien à voir avec le tri. – Artefacto

+0

Ouais c'est beaucoup mieux, merci! – Indigo

Répondre

1

D'abord, je dois changer « Décembre », « Décembre (2) » & « Décembre (3) » à ' Date », 'Lieu' & 'événement' ...

foreach ($arr as &$a) { 
    $a["Date"] = $a["December (2)"]; 
    unset($a["December (2)"]); 
    $a["Location & Event"] = $a["December (3)"]; 
    unset($a["December (3)"]); 
} 
//$a is a reference; this avoids accidental overwrites on the last subarray 
unset($a); 

vous pouvez boucler le tableau à nouveau, et vous aurez les nouvelles clés:

foreach ($arr as $a) { 
    //do sth with $a["December"]; 
    //do sth with $a["Date"]; 
    //do sth with $a["Location & Event"]; 
} 
+0

Super, merci! J'ai utilisé les vôtres et les exemples de Mala pour réaliser ce que je voulais ... – Indigo

0

Quelque chose comme ceci:

<?php 
$array = array(
    array(
     'date' => ..., 
     'location' => ..., 
     'event' => .... 
    ), 
    ... 
); 
?> 

?

2

Vous souhaitez copier les valeurs dans un nouveau tableau. Vous pouvez faire quelque chose comme:

foreach ($arr as $a) 
{ 
    // this gets the keys 'December', 'December (2)', etc 
    $keys = array_keys($a) 

    // this copies the values to the new array 
    $newarr['date'] = $a[$keys[0]]; 
    $newarr['location'] = $a[$keys[1]]; 
    $newarr['event'] = $a[$keys[2]]; 
    // ... continue with as many fields as you have or need 
} 

Chaque élément serait alors accessible via $newarr[1]['date'] et ainsi de suite. Le résultat de l'utilisation de array_keys() au lieu de hardcoding dans "December (3)" et ainsi de suite est que cette fonction fonctionnera quel que soit le mois (je suppose que vous devrez probablement l'exécuter contre Janvier, Février, et ainsi de suite.

en toute honnêteté, cependant, si vous n'êtes pas à l'aise avec les tableaux, vous avez probablement ne devrait pas essayer de faire un travail de base de données ...

+0

Génial merci ... oui 'Décembre', 'Décembre (2)' etc va changer donc ne peux pas être codé en dur ... – Indigo

0

si l'on suppose que les touches sont toujours « Décembre », « Décembre (2) » etc, cela devrait prendre en charge le changement de nom:

foreach ($array as &$entry) { 
    $entry = array('Date' => $entry['December'], 'Location' => $entry['December (2)'], 'Event' => $entry['December (3)']); 
} 

a partir de là, chaque entrée est accessible à $array[0]['Date'], $array[1]['Date'] etc. Vous pouvez faire une boucle sur eux dans une boucle for et utiliser $array[$i]['Date'], ou vous utilisez une autre boucle foreach. C'est un exercice de base que je vais vous laisser cependant.

Questions connexes