2010-10-19 4 views
1

Je suis en train de créer une section de filtres pour ma page de recherche et je me demandais quelle est la meilleure façon de faire les chaînes de requête. Mon problème est que ces liens fonctionnent comme des cases à cocher, donc certains, tous ou aucun peut être activé. Je devrais faire une boucle sur chacun d'environ 30 liens, en supprimant ou en ajoutant la valeur de ce lien spécifique en fonction de son état.Création de liens de chaîne de requête

Ma première préoccupation est:

Dois-je passer les tableaux comme

colors=red,blue,green //explode?

ou

colors[]=red&colors[]=blue&colors[]=green //parse_str?

Quel est le plus rapide/meilleure façon d'enlever une certaine valeur d'un certain tableau que je boucle à travers chaque lien? J'imagine que ça serait un peu plus compliqué d'utiliser la deuxième méthode que j'ai posté ci-dessus, oui?



EDIT2 - Que pensez-vous de cela?

J'ai couru dans un tutoriel en ligne et est venu avec ceci:

 
function remove($filters = array(), $remove_key = NULL, $remove_val = NULL) 
    { 
     if($remove_key != NULL && array_key_exists($remove_key,$filters)) 
     { 
      if($remove_val != NULL && array_key_exists($remove_val,array_flip($filters[$remove_key]))) 
      { 
       $filters[$remove_key] = array_diff($filters[$remove_key],array($remove_val)); 
      } else { 
       unset($filters[$remove_key]); 
      } 
     } 
     return http_build_query($filters); 
    } 

Actuellement, je peux passer $ remove_key pour enlever une clé et remove_val $ pour supprimer une valeur d'une clé dans un tableau.

Qu'en pensez-vous? Serait-ce trop lent pour faire 30-50 liens? Merci!

+2

Note dans votre deuxième exemple, vous ne devez pas appeler 'parse_str'; PHP va peupler '$ _GET ['colors']' avec un tableau pour vous. – meagar

Répondre

3
colors[]=red&colors[]=blue&colors[]=green 

Serait un la façon dont un formulaire soumettrait les données (quand la méthode = "get"). Et vous pouvez y accéder via $ _GET ['colors'] qui est le natif et probablement le moyen le plus rapide.

EDIT: pour obtenir cette chaîne via http_build_query il suffit de les remplir dans la couleur du tableau

$data = array('colors' => array('green','red','blue')); 
echo http_build_query($data); // colors[0]=green&colors[1]=red&colors[2]=blue 
+0

+1: Sans mentionner qu'il ne nécessite pas de JavaScript pour l'assemblage. Et c'est la méthode la plus portable (puisque tous les navigateurs devraient pouvoir la manipuler) ... – ircmaxell

+1

@ircmaxell thx - effacer le cas de KISS – Hannes

+0

couleurs [] = rouge & couleurs [] = bleu & couleurs [] = vert devient 0 = rouge & 1 = bleu & 2 = vert quand j'utilise http_build_query - comment puis-je reconstruire la chaîne de requête? (ou même supprimer une valeur avant de la reconstruire?) – RS7