2012-11-30 7 views
3

Cela faisait longtemps que je n'avais pas fait de programmation en PHP, donc j'essaye de lancer la rouille. J'essaie de créer une structure de tableau associatif comme ceci.Tableaux associatifs (2 parter)

[results] 
    [total] 
    [people] 
     [name] 
     [street] 
     [city] 
     [state] 
     [zip] 

Currently, I have this. 

$people = array('name' => '', 
       'street' => '', 
       'city' => '', 
       'state' => '', 
       'zip' =>); 

$results = array('total' => 10, --set dynamically 
       'people' => $people); 

Donc, dans ma tête, je l'espère, faire un tableau multidimensionnel vide que je serai en mesure de remplir dans une boucle while.

D'abord, la question est-ce la bonne forme? J'ai l'impression d'être proche mais pas juste. Il pourrait être utile de comprendre ce que je suis en train de faire (voir ci-dessous).

Donc, comme je l'ai dit, je veux remplir cela dans une boucle while et c'est essentiellement ce que j'ai jusqu'à présent. Et jusqu'à présent, j'ai été incapable de me rendre au travail. J'ai essayé plusieurs combinaisons différentes de cela et j'ai toujours été incapable de faire les choses correctement. Si c'est important, je veux prendre ce tableau et le renvoyer au navigateur en tant qu'objet JSON.

Je ne suis pas sûr si mon initialisation est incorrecte, le réglage de la matrice dans la boucle est faux, ou les deux.

+0

Quelques pointeurs, comme vous l'avez ici le [i] doit être [$ i], le nom/rue etc clés doivent être entre guillemets, votre incrémenteur doit être i $ pas% 1, et votre condition while doit être entre parenthèses. – WebChemist

Répondre

1

Les tableaux PHP doivent être instanciés séparément et en place. Je ne sais pas comment le décrire correctement, mais votre code devrait ressembler à:

$results = array(); 
$results['total'] = $somevalue; 
$results['people'] = array(); 

/*or: 
$results = array(
    'total' => $somevalue, 
    'people' => array() 
);*/ 

$i = 0; 
while($some_condition) { //or: for($i=0; $i<$something; $i++) { 
    $results['people'][$i] = array(); 
    $results['people'][$i]['name'] = 'XxXxX'; 
    $results['people'][$i]['street'] = 'XxXxX'; 
    $results['people'][$i]['city'] = 'XxXxX'; 
    $results['people'][$i]['state'] = 'XxXxX'; 
    $results['people'][$i]['zip'] = 'XxXxX'; 

    /*or: 
    $results['people'][$i] = array(
     'name' => 'XxXxX', 
     'street' => 'XxXxX', 
     'city' => 'XxXxX', 
     'state' => 'XxXxX', 
     'zip' => 'XxXxX', 
    );*/ 

    $i++; 
} 

Gardez à l'esprit que si vous utilisez des tableaux associatifs dont vous avez besoin pour envelopper la chaîne clé entre guillemets. En outre, vous pouvez toujours accéder à des tableaux associatifs en utilisant des index entiers que vous devriez sentir si enclins.

+0

Merci d'avoir répondu si rapidement. C'est exactement ce que je cherchais. – complexenigma

+0

Ouais, ça sonnait comme si vous veniez d'un de ces langages comme C où vous dites à la machine "J'ai besoin d'un tableau de X X Y x Z" et cela libère immédiatement beaucoup de mémoire, tout est prêt à utiliser, et le ciel vous aider si vous avez besoin de plus. Passer de cela au cluster cluster semi-compréhensible de PHP de tableaux bizarres et de typage dynamique est un peu un mindfsck.Et PHP va * descendre * d'ici ...: D – Sammitch

0

Il y a quelques problèmes que je vois. Le premier est que vous avez %i++ au lieu de $i++. Plus tard, vous faites référence à i au lieu de $i. Le suivant est à l'intérieur de votre boucle while, vous tentez d'accéder à name, street, ect sans utiliser de guillemets (cela peut/ne peut pas afficher un avertissement en fonction de votre configuration).

Essayez d'utiliser ceci:

$i = 0; 
while(NEED SOME CONDITION HERE) 
{ 
    $results['people'][$i] = array(); //Need to let PHP know this will be an array 
    $results['people'][$i]['name'] = 'XxXxX' 
    $results['people'][$i]['street'] = 'XxXxX' 
    $results['people'][$i]['city'] = 'XxXxX' 
    $results['people'][$i]['state'] = 'XxXxX' 
    $results['people'][$i]['zip'] = 'XxXxX' 


$i++; 
} 
0
$i = 0; 
while (true) 
{ 
    $results['people'][$i]['name'] = 'XxXxX' 
    $results['people'][$i]['street'] = 'XxXxX' 
    $results['people'][$i]['city'] = 'XxXxX' 
    $results['people'][$i]['state'] = 'XxXxX' 
    $results['people'][$i]['zip'] = 'XxXxX' 


$i++; 
} 
+0

cela se traduirait par une boucle infinie, car il n'y a pas de condition qui rendrait vrai devenir faux ou casser pour échapper à la boucle. En fait vrai, être une constante, serait impossible d'avoir sa valeur réaffectée à faux! – WebChemist

0

d'abord plutôt que de nommer toutes vos clés et déclarant des chaînes vides, vous pouvez simplement faire un tableau de noms et d'utiliser array_fill_keys pour les convertir en clés et leur donner tout un valeur par défaut (devrait probablement utiliser NULL au lieu de '' sauf si vous devez utiliser append (.=) dans une boucle Plutôt qu'une boucle while, j'utiliserais simplement une boucle for, mais vous pourriez faire un while $i < 10 avec $i++ si vous préférez while plus for

$people = array_fill_keys(array('name', 'street', 'city', 'state', 'zip'), ''); 

$results = array('total' => 10, 'people' => array()); 

for($i = 0; $i < $results['total']; $i++){ 
    $results['people'][$i]['name'] = 'XxXxX'; 
    $results['people'][$i]['street'] = 'XxXxX'; 
    $results['people'][$i]['city'] = 'XxXxX'; 
    $results['people'][$i]['state'] = 'XxXxX'; 
    $results['people'][$i]['zip'] = 'XxXxX'; 
} 
Questions connexes