2010-08-06 4 views
0

HELLOCombiner des tableaux PHP

DÉSOLÉ POUR FRANÇAIS, je vais essayer anglais i avoir des tableaux d'arbres comme celui-ci

$keys = array("elment1","elment1","elment2","elment1"); 
// this one can have duplicates values , 

$operator = array("=","<",">","="); 
// operators for Mysql query 

$queries = array("query1","query2","query3","query4"); 
// mixtes values 

la question est:

comment puis-je combiner ces tableaux d'arbres comme si :

$string = "SELECT FROM tables 
      WHERE 
      (elment1 = query1 OR elment1<query2 OR elment1=query4) 
      // need group duplicates keys 
      AND 
      elment2 > query3"; 
      // non duplicates 

pourquoi je demande cela, parce que j'ai besoin de thi s pour une recherche multi-filtre situé

l'utilisateur d'appuyer sur un bouton (+) pour ajouter des clés + opérateur + interroger un grand nombre de temps comme il aime

J'utilise jquery pour créer des éléments de forme, et chaque() fonction pour générer 3 tableaux avant de poster tout php

si quelqu'un connaît une meilleure approche alors bienvenue et je vous remercie beaucoup

+0

Quelle est cette langue? S'il vous plaît écrivez votre question en anglais. – Sarfraz

+0

sa langue française –

+0

Je sais assez pour savoir que c'est français, mais pas assez pour savoir quelle est la question. – jergason

Répondre

2

Bonjour,

Voici le code. essayé et testé. Voila le code ... essayer avec succé

$keys = array("elment1","elment1","elment2","elment1"); 
// this one can have duplicates values , 
$operator = array("=","<",">","="); 
// operators for Mysql query 
$queries = array("query1","query2","query3","query4"); 
// mixtes values 

$joined = array(); 
for($i = 0, $size = sizeof($keys); $i < $size; ++$i) 
{ 
    $joined[$keys[$i]][] = $keys[$i] . $operator[$i] . $queries[$i]; 
} 

foreach ($joined as $key => &$value) 
{ 
    $value = implode(' OR ', $value); 
    $value = "(" . $value . ")"; 
} 
$query = implode(' AND ', $joined); 
print $query; 
+0

attention au code "foreach ($ joint comme $ key => & $ value)" avant $ value il y a "&". cela remet la valeur attachée dans $ jointe. devant $ value il y a un '&' qui stocke la valeur dans le tableau $ joint. – Anand

+0

utiliser 'Voir la source' pour voir la sortie réelle .. les signes '<' and '>' cachent la chaîne dans le navigateur – Anand

+0

merci beaucoup Anand, ce travail parfaitement j'ai testé avec des tableaux aléatoires, c'est juste fonctionne merci – cranberies

4

vous avez posé une question en français, je vais répondre en anglais et vous pouvez utiliser Google Traduisez si vous avez besoin d'une traduction. [Utilisez Google Translate pour traduire cette réponse si vous voulez.]

Tout d'abord, vous devrez concaténer les pièces. Faites attention à la mysql_real_escape_string, ce qui rend l'ensemble de l'opération un peu plus sûr.

$joined = array(); 
for($i = 0, $size = sizeof($keys); $i < $size; ++$i) { 
    $joined[$i] = $keys[$i] . " " . $operator[$i] . " '" . mysql_real_escape_string($queries[$i]) . "'"; 
} 

Ensuite, vous pouvez utiliser implode:

$string = 'SELECT [...] WHERE (' . implode(' OR ', $joined) . ')'; 
+0

merci pour votre réponse et désolé pour mon français votre code est très pratique, mais cela va ajouter OU pour toutes les touches je veux faire cela pour les clés en double seulement et par défaut utiliser ET pour les non doublons: $ string = « SELECT FROM tables OÙ (elment1 = query1 OU elment1 query3 "; – cranberies