IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

array en index d'un autre array


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut array en index d'un autre array
    Bonjour,

    Je souhaite mettre en place un filtre pour des requête SQL. Je crée donc des requêtes dynamiques en fonction des données POSTées par le formulaire filtre.
    Pour certains éléments (des pourcentages par exemple) les données sont envoyées sous forme d'array pour dire que la données est comprise entre 20 et 80 par ex.
    Dans le cas des pourcentages, il faut effectuer 9 fois la même action, j'ai donc pensé à mettre l'index de chaque élément dans un array pour ensuite pouvoir boucler dessus 9 fois.
    Mais le serveur me dit que c'est un "type d'offset illegal"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $iso[] = array("a1","a2","a3","a4","p1","p2","p3","p4","p5");
    	for($i=0 ; $i<=8 ; $i++) {
    		if(!empty(array_filter($_SESSION['searchForm']$iso[$i]))) {
    			$req.= (!empty($_SESSION['searchForm'][$iso[$i]][0]))? " $iso[$i] BETWEEN ".$_SESSION['searchForm'][$iso[$i]][0]." AND":" $iso[$i] BETWEEN 0 AND";
    			$req.= (!empty($_SESSION['searchForm'][$iso[$i]][1]))? " ".$_SESSION['searchForm'][$iso[$i]][1]." AND":" 100 AND";
    //$iso[$i][0] et $iso[$i][0] sont les valeurs min et max que l'on rentre dans le filtre.
    			}
    		}
    Le code fonctionne bien si je met les indexes comme il faut ($_SESSION['searchForm'][a1][0]) mais je préférerais quand même passer par une boucle ou quelque chose du genre.
    Si quelqu'un à un solution à mon problème, je suis preneur!

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Écris simplement ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $iso[] = array("a1","a2","a3","a4","p1","p2","p3","p4","p5");
     
    foreach ($iso as $col) {
    	$min = empty($_SESSION['searchForm'][$col][0]) ? 0 : $_SESSION['searchForm'][$col][0];
            $max = empty($_SESSION['searchForm'][$col][1]) ? 100 : $_SESSION['searchForm'][$col][1];
    	$req .= $col . ' BETWEEN ' . $min . ' AND ' . $max;
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Dieu que je suis nul...

    Merci pour la réponse.
    Bonne soirée

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je m'autocorrige pour le AND entre chaque condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $iso[] = array("a1","a2","a3","a4","p1","p2","p3","p4","p5");
     
    foreach ($iso as $col) {
    	$min = empty($_SESSION['searchForm'][$col][0]) ? 0 : $_SESSION['searchForm'][$col][0];
            $max = empty($_SESSION['searchForm'][$col][1]) ? 100 : $_SESSION['searchForm'][$col][1];
    	$where[] = '(' . $col . ' BETWEEN ' . $min . ' AND ' . $max . ')';
    }
    $req .= implode(' AND ', $where);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Bonjour,
    En fin de compte, ça ne marche pas avec ce code, j'ai bien fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $iso[] = array("a1","a2","a3","a4","p1","p2","p3","p4","p5");
     
    foreach ($iso as $col) {
    	$min = empty($_SESSION['searchForm'][$col][0]) ? 0 : $_SESSION['searchForm'][$col][0];
            $max = empty($_SESSION['searchForm'][$col][1]) ? 100 : $_SESSION['searchForm'][$col][1];
    	$where[] = '(' . $col . ' BETWEEN ' . $min . ' AND ' . $max . ')';
    	$req .= implode(' AND ', $where);
            }
    Mais j'obtiens encore l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: Illegal offset type in /var/www/html/import_BDD.php on line 80
    Une autre solution peut-être?

  6. #6
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut
    Bonjour,
    l'erreur ne nous dit pas quelle ligne du code est fausse mais a priori il doit manquer un des $col dans $_SESSION['searchForm'].
    Il faudrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($iso as $col) {
    if (!key_exists($col, $_SESSION['searchForm'])) continue;
    ...}
    ou donner les valeurs par défaut min et max si la clé est absente.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération d'un array dans un autre array
    Par slake13 dans le forum Langage
    Réponses: 1
    Dernier message: 14/10/2009, 16h09
  2. Recherche d'index dans list ou array
    Par mister2502 dans le forum Général Python
    Réponses: 3
    Dernier message: 02/04/2009, 20h40
  3. Javascript, array et index
    Par sietjp dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/11/2006, 17h45
  4. [Tableaux] passer un array d'une page à une autre
    Par 18Marie dans le forum Langage
    Réponses: 5
    Dernier message: 25/06/2006, 22h42
  5. Réponses: 21
    Dernier message: 20/06/2006, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo