2013-10-14 1 views
-1

J'ai quelque chose comme ceci:Comment se débarrasser des valeurs vides lors de l'ajout chaîne en php

public function options() 
     { 
     $out = ''; 
     $docs = $this->getAll();; 
     foreach($docs as $key => $doc) { 
      $out .= ',{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}'; 
     } 
     return $out; 
     } 

Il me donne une liste d'options de la DB, mais il me donne aussi une valeur nulle au sommet .

si je l'écris comme ceci:

public function options() 
    { 
     //$out = ''; 
     $docs = $this->getAll();; 
     foreach($docs as $key => $doc) { 
      $out = ''; 
      $out .= '{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}'; 
     } 
     return $out; 
    } 

Il ne me donne pas la valeur nulle, mais elle retourne une seule valeur.

$out .= ',{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}'; 

Dans cette ligne si je ne fais pas un , il me donne un message d'erreur, parce que j'ai $out = ''; en haut. Maintenant, vous pouvez me donner une idée de comment puis-je obtenir toutes les valeurs de la base de données sans la valeur vide au début.

J'ai aussi une autre question, pourquoi nous utilisons ;; (double point-virgule) dans ce code:

$docs = $this->getAll();; 
+0

Le double point-virgule ne devrait pas être présent. Bien qu'il ne produise pas d'erreur de syntaxe, c'est incorrect. –

+0

Et comme quelqu'un a répondu ci-dessous, PHP a une fonction intégrée pour faire face à JSON - json_encode et json_decode –

Répondre

0

Ce n'est pas la bonne façon de construire JSON. Commencez par créer un tableau et utilisez json_encode() dessus.

0

Je suggère d'utiliser un array au lieu de contenir les valeurs individuelles, et en utilisant join pour les concaténer ensemble.

public function options() 
{ 
    $docs = $this->getAll(); 
    // Create an empty array 
    $items = array(); 
    foreach($docs as $key => $doc) { 
     // "Push" an item to the end of the array 
     $items[] = '{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}'; 
    } 
    // Join the contents together 
    $out = join(",", $items); 
    return $out; 
} 

De plus, le double point-virgule est complètement inutile.

1

$ test pour voir si elle a une longueur, le cas échéant ajouter la virgule et la ligne, sinon situé juste à la ligne:

$out=""; 
foreach($docs as $key=>$doc){ 
    if(strlen($out)){ 
     $out.=',{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}'; 
    }else{ 
     $out='{"label" : "' . $doc['name'] . '", "value" : "' . $doc['id'] .'"}'; 
    } 
} 

à votre autre question, euh, vous avez écrit le code, alors pourquoi avez-vous mis un double point-virgule?

+0

Je débogue du code d'autres développeurs et je peux voir ce double point-virgule dans beaucoup d'endroits, donc je me demandais ce qui se passe là comme je ne viens jamais avec double point-virgule. – modon

+0

@Bukamanush: Pouvez-vous poster la sortie requise? –

Questions connexes