2010-11-22 6 views
2

J'ai un problème avec ma fonction explode en PHP.Problème avec explode() en PHP

Je tire une chaîne à partir de la base de données comme suit:

column_name 
    0,2000,0,3000,1000,7000,1000,0,0,0 

Après avoir tiré ceci dans un objet appelé recordset $ J'utilise la fonction exploser pour faire un tableau hors de lui ... comme suit:

$array = explode(",",$recordset->column_name) 

Mais certains comment, le tableau est pas ce que j'attendre ...

Voici ce que je reçois quand je fais l'écho du tableau:

 Array 
    (
    [0] => 0 
    [1] => 0 
    [2] => 0 
    [3] => 3000 
    [4] => 7000 
    [5] => 2000 
    [6] => 1000 
    [7] => 1000 
    [8] => 0 
    [9] => 0 
    ) 

Comme vous pouvez le voir, je ne reçois pas les valeurs que je devrais ... Cependant, si ma chaîne à partir de la base de données est courte, dire:

1000,0,1200,0 

La logique ci-dessus fonctionne très bien. .

Je ne sais pas comment déboguer ou résoudre ce problème ..

S'il vous plaît, aide?

+7

Qu'est-ce que vous obtenez si vous var_dump ($ recordset-> column_name); '? – Stephen

+0

Bonjour Stephen, je reçois ceci: "0,0,0,3000,7000,2000,1000,1000,0,0" –

+5

Donc, vous obtenez exactement la chaîne que le tableau éclaté représente? – Stephen

Répondre

5

Le problème n'est pas avec explode(). Le problème est la chaîne que vous extrayez de la base de données. Si cette chaîne est concaténée en quelque sorte, je commencerais à regarder là. Sinon, vérifiez la chaîne dans votre base de données ou vérifiez la requête qui accède à la table.

Regardez la documentation pour GROUP_CONCAT. Vous pouvez spécifier l'ordre dans la syntaxe.

+0

Oui, je concatène les chaînes en utilisant GROUP_CONCAT dans ma requête ... pensez-vous que cela pourrait poser un problème? Si oui, alors pourquoi ce n'est pas un problème si les chaînes concaténées sont courtes, disons 4 ou 5 valeurs séparées par des virgules. –

+3

Les courts sont retournés dans l'ordre prévu par coïncidence. Vous devrez spécifier une commande. – Stephen

+0

J'ai deux autres colonnes que je concatène .. Comment puis-je maintenir la cohérence de sorte que quand j'explose les tableaux des deux autres colonnes, je peux les associer en utilisant array_combine .. ?? Je suis sûr que j'utiliserais ORDER BY ici encore? droite? et si je le commande, dois-je commander toutes les trois colonnes en fonction d'une seule colonne? Merci! –

1

Le problème n'est pas explose, comme vous pouvez le voir dans this codepad explode fonctionne correctement.

Vérifiez les valeurs provenant de votre base de données et assurez-vous qu'elles sont dans l'ordre souhaité.

Editer: Comment cette valeur est-elle générée dans la base de données? Est-ce une valeur statique dans un champ ou est-il créé à partir d'une concaténation?

+0

J'ai vérifié les valeurs dans cet ordre: 0,2000,0,3000,1000,7000,1000,0,0,0 en utilisant la console phpMyAdmin ... –

+0

Il est créé après la concaténation ... –

+1

C'est l'ordre dans lequel ils sont affichés dans phpMyAdmin, mais phpMyAdmin peut utiliser une logique différente pour obtenir ou organiser cette sortie. Quoi qu'il en soit, si vous dessinez des valeurs à partir d'une base de données sans spécifier d'ordre dans votre SQL, les données peuvent arriver dans l'ordre de la base de données. – Hammerite