2010-10-17 7 views
2

J'ai écrit un code pour analyser quelque chose, en créant dynamiquement un tableau parmi les clés d'un tableau. C'est à partir d'un formulaire, donc la clé impaire a une valeur, et c'est en quelque sorte le problème.PHP: impossible pour chaque tableau associatif simple

Mon code:

//array values are not needed in my code, just junk rather 
$array = array('one_a'=>2, 'three_b', 'four_c', 'five_d'=>12); 

$number = array(); 
$letter = array(); 

foreach($array as $element) { 
    $parts = explode("_", $element); 
    $number[] = $parts[0]; 
    $letter[] = $parts[1]; 
} 

print_r($number); 

Je ne comprends pas comment cela pourrait aller mal, mais quand les foreach() itère au tableau associatif, il lit « 2 » et « 12 » comme des touches de tableau séparées! Cela ruine mon code $explode et génère une erreur, car "2" ne contient aucun _.

Pourquoi le tableau associatif échoue-t-il comme ceci? J'ai essayé de définir explicitement as $element => $value, PAS en utilisant $ value (pour essayer de l'ignorer), mais cela jette encore plus d'erreurs.

Répondre

5

Le problème n'est pas, que 2 et 12 sont considérés comme des clés, mais plutôt qu'ils sont considérés comme les valeurs réelles. Si vous faites un print_r($array), vous verrez:

Array 
(
    [one_a] => 2 
    [0] => three_b 
    [1] => four_c 
    [five_d] => 12 
) 

(three_b et four_c obtenir attribué une clé de tableau supplémentaire automatique) Vous devez donc tenir compte que la puissance clé en numérique:

<?php 
$array = array('one_a'=>2, 'three_b', 'four_c', 'five_d'=>12); 

$number = array(); 
$letter = array(); 

// get the key separate from the element: 
foreach($array as $key => $element) { 
    // and now check for the key 
    if (is_numeric($key)) 
     $value = $element; 
    else 
     $value = $key; 

    $parts = explode("_", $value); 
    $number[] = $parts[0]; 
    $letter[] = $parts[1]; 
} 

print_r($number); 

cela vous obtiendrez

Array 
(
    [0] => one 
    [1] => three 
    [2] => four 
    [3] => five 
) 
+0

Ah, c'est vraiment bizarre, j'avais travaillé avec PHP pendant un certain temps, mais jamais tombé sur quelque chose comme ça avant. Je vais chercher une méthode différente pour analyser les éléments de forme comme ça. Accepté quand je peux. – John

Questions connexes