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 :

Extraire des valeurs commençant par un même caractère dans un tableau


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2016
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Extraire des valeurs commençant par un même caractère dans un tableau
    Bonjour,

    j'ai une table nommée "schedules" de ma base de données MySQL comportant 25 colonnes. J'ai une colonne nommée "flightnum" comportant des valeurs commençant par la lettre A (A001, A002, A003..) et des valeurs commençant par la lettre B (B001, B002, B003...)

    J'affiche actuellement en PHP (avec foreach) la totalité du tableau avec toutes les valeurs de toutes les colonnes dans l'ordre.

    Par contre, j'aimerais afficher uniquement les valeurs de cette colonne "code" commençant par la lettre A dans un tableau, et afficher les valeurs de cette même colonne commençant par la lettre B dans un second tableau.

    Avez-vous une idée pour effectuer ce tri et afficher deux tableaux séparés ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut

    regarde du côté de LIKE

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2016
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Je pense que je n'ai pas été assez précis, je vais développer un peu plus et mettre le code actuellement en place, car la solution de la base de données n'est pas possible.

    Le but est de sortir des lignes d'une compagnie aérienne virtuelle gérée grâce au CMS PHPVMS. L'année dernière, j'ai mis le système suivant en place :

    J'ai un dossier modules avec un sous-dossier lignes dans lequel j'ai le fichier lignes.php suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    class lignes extends CodonModule
    {
    	public $title = 'Lignes régulières';
     
    	public function index() 
    	   {
            $this->show('lignes.php');        
        }
    }
    ?>
    j'ai un dossier templates avec un fichier lignes.php suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <div id="pageLignes">
    <?php
        $lignes = $_GET['action'];
        switch($lignes) {
            case "afq":
                $division = "Afrique";
                $txtprez="lorem ipsum....";
                $mymap="Ici un code Google MyMaps";
    			break;
     
            case "arc":
                $division = "Marseille";
                $txtprez="lorem ipsum...";
                $mymap="Ici un code Google MyMaps";
    			break;
     
            case "brs":
                $division = "Taxi-brousse";
                $txtprez="lorem ipsum...";
                break;
     
            case "dra":
                $division = "Dessertes régionales";
                $txtprez="lorem ipsum...";
                break;
     
            case "jaf":
                $division = "Jets affaire";
                $txtprez="lorem ipsum...";
                break;
        }
        echo '<div class="titreBord"><h1><i class="fa fa-plane" aria-hidden="true"></i> Division '.$division.'</h1></div><p>'.$txtprez.'</p>'.'<br><center>'.$mymap.'</center><br>';
    ?>
     
    <p></p>
     
     
    <table>
     
    	<thead>
    		<tr>
    			<th>Division - #ligne</th>
    			<th>Dép. ICAO</th>
    			<th>Arr. ICAO</th>
    			<th>Appareil</th>
    			<th>Distance</th>
    			<th>Prix billet</th>
    			<th>Opérations</th>
    		</tr>
    	</thead>
    <?php
        $params = array(
    		's.code' => array ($lignes)
        );
    	$schedules = SchedulesData::findSchedules($params);
    	foreach($schedules as $sched){
    	echo '<tbody>';
    				echo '<tr>';
    					echo '<td>'.$sched->code.' - '.$sched->flightnum.'</td>
    					<td>'.$sched->depicao.'</td>
    					<td>'.$sched->arricao.'</td>
    					<td>'.$sched->aircraft.'</td>
    					<td>'.ceil($sched->distance).' nm</td>
    					<td>'.$sched->price.' €</td>
    					<td><a href="'.SITE_URL.'/index.php/schedules/brief/'.$sched->id.'">Briefing pilote</td>';
    				echo "</tr>";
    }
    		echo "</tbody>";
    echo "</table>";
    ?>
    </div>
    Je sors le tableau en faisant une requête dans l'url de cette manière : http://monsite.fr/lignes?action=arc

    Chaque case correspond à un hub, c'est à dire à une "base" de la compagnie aérienne virtuelle. Actuellement le système est donc basé sur ces codes de hubs. En modifiant ce code de 3 lettres dans l'URL, on liste des lignes différentes. Le modèle de numéro de lignes est par exemple pour le hub AFQ : AFQ-N001, où N001 est le n° de ligne.

    Ce que je souhaite faire, c'est lister les lignes non plus sur le code de 3 lettres, mais lister toutes les lignes commençant par exemple par la lettre N.

    J'espère que ma demande est plus claire, excusez-moi pour l'imprécision de mon premier message.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    il y a plusieurs points que tu dois reprendre :
    la liste des hub : à la place du switch, je préfère de loin cette présentation bien plus souple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    $data = [
        'afq' => [
            'division' => 'Afrique',
            'txtprez'  => 'lorem ipsum....',
            'mymap'    => 'Ici un code Google MyMaps'
        ],
        'arc' => [
            'division' => 'Marseille',
            'txtprez'  => 'lorem ipsum....',
            'mymap'    => 'Ici un code Google MyMaps'
        ],
        'brs' => [
            'division' => 'Taxi-brousse',
            'txtprez'  => 'lorem ipsum....',
            'mymap'    => 'Ici un code Google MyMaps'
        ],
        'dra' => [
            'division' => 'Dessertes régionales',
            'txtprez'  => 'lorem ipsum....'
        ],
        'jaf' => [
            'division' => 'Jets affaire',
            'txtprez'  => 'lorem ipsum....'
        ]
    ];
    ensuite le nommage des variables est très important car cela facilite grandement la compréhension du code quand tu dois t'y replonger dedans :
    tu dis :
    Actuellement le système est donc basé sur ces codes de hubs
    et quand tu lis ton code tu considère qu'un hub est équivalent à une ligne et depuis quand ?
    tu fais $lignes = $_GET['action']; alors que cela devrait être $hub = $_GET['action'];ensuite cela donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($data[$hub])) { ... }
    Enfin dans ton premier message tu dis
    J'ai une colonne nommée "flightnum" comportant des valeurs commençant par la lettre A (A001, A002, A003..)
    et je t'ai dit de regarder du côté de LIKE ainsi tu pourrais faire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ta_table WHERE hub = ... AND flightnum LIKE 'A*' ORDER BY ...
    pour ne sélectionner que les enregistrements adéquates

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2016
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    merci pour ces précisions. J'ai donc fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?php
        $hub = $_GET['action'];
        $data = [
            'afq' => [ 
                'division' => 'Afrique',
                'txtprez' => lorem ipsum...',
                'mymap' => 'lorem ipsum...'></iframe>'
                ],
     
            'arc' => [
                'division' => 'Europe',
                'txtprez' => 'lorem ipsum...',
                'mymap' => 'lorem ipsum...></iframe>'
    			],
     
            'brs' => [
                'division' => 'Taxi-brousse',
                'txtprez' => 'lorem ipsum...'
                ],
     
            'dra' => [
                'division' => 'Dessertes régionales',
                'txtprez' => 'lorem ipsum...'
                ],
     
            'jaf' => [
                'division' => 'Jets affaire',
                'txtprez' => 'lorem ipsum...'
                ]
        ]
        echo '<div class="titreBord"><h1><i class="fa fa-plane" aria-hidden="true"></i> Division '.$data->division.'</h1></div><p>'.$data->txtprez.'</p>'.'<br><center>'.$data->mymap.'</center><br>';
    ?>
    N'ayant plus pratiqué le php depuis un moment, c'est après que je ne comprend pas comment utiliser la requête SQL et le isset.

    Est-ce que je définis une variable pour utiliser la requête comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hubsql = 'SELECT * FROM ma_table WHERE hub = '.$hub.' AND flightnum LIKE `\'A*\' ORDER BY flightnum';
    j'avoue que je patauge un peu dans la semoule

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    si toi tu patauges alors pense donc moi qui esssaie de jouer aux devinettes tant tes bouts de codes sont parcellaires
    je ne saisis pas moi-même la logique du code.
    Pour le SQL, il faudrait déjà voir ce que renvoie $schedules = SchedulesData::findSchedules($params); et surtout comment fonctionne ton système d'extraction des données car il n'a pas l'air simplement d'être basé sur des requêtes construites à la main.

    Voici comment j'envisageais que tu utilises mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    $data = [
        'afq' => [
            'division' => 'Afrique',
            'txtprez'  => 'lorem ipsum....',
            'mymap'    => 'Ici un code Google MyMaps'
        ],
        'arc' => [
            'division' => 'Marseille',
            'txtprez'  => 'lorem ipsum....',
            'mymap'    => 'Ici un code Google MyMaps'
        ],
        'brs' => [
            'division' => 'Taxi-brousse',
            'txtprez'  => 'lorem ipsum....',
            'mymap'    => 'Ici un code Google MyMaps'
        ],
        'dra' => [
            'division' => 'Dessertes régionales',
            'txtprez'  => 'lorem ipsum....'
        ],
        'jaf' => [
            'division' => 'Jets affaire',
            'txtprez'  => 'lorem ipsum....'
        ]
    ];
     
    // fonction d'échappement des caractères dangereux
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
     
    $action = $_GET['action'] ?? 0;
    $hub    = $data[$action]  ?? '';
     
    if (empty($hub)) {
        echo <<<html
    <div class="titreBord">
        <h1><i class="fa fa-plane" aria-hidden="true"></i>Hub inconnu<br></h1>
    </div>
    html;
    } else {
        echo <<<html
    <div class="titreBord">
        <h1><i class="fa fa-plane" aria-hidden="true"></i>Division {$hsc($hub['division'])}</h1>
    </div>
    <p>{$hsc($hub['txtprez'])}</p><br>
    <center>{$hsc($hub['mymap'] ?? '')}</center><br>
    html;
    }
    Attention, ça ne fonctionnera que sur PHP 7+

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2016
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Pour te donner une idée de ce qu'il y a actuellement, voici le lien vers la page renvoyant les lignes du hub Afrique :

    http://arcadair.fr/index.php/lignes?action=afq

    On peut voir que dans le tableau, il y a dans la première colonne le code de 3 lettres du hub (AFQ) et le n° de ligne (N001 à N074). C'est donc par ces n° de lignes que je souhaite trier ce qui va s'afficher dans la page. Je pense que la solution avec le like est intéressante, mais je ne sais pas comment la mettre en place. Pour info le site tourne et PHP 5.6. Je ne sais pas s'il pourrait fonctionner en basculant vers une version PHP 7.x. Je vais vérifier ça en local sous wamp

    Edit : Non, j'ai testé, il ne fonctionne pas sous PHP 7.x (j'ai testé la 7.0.23 et la 7.1.9)

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    ok, note que toute la branche PHP 5 n'a plus aucun support depuis le 1er janvier 2019 (je pense que tu devras t'occuper très rapidement de la migration vers la version la plus récente du moteur PHP).

    pour ce qui est de la modif de ton site, ça dépasse de loin l'aide que tu trouveras ici. Si toi tu ne sais pas comment faire alors que t'es en prise directe avec le code source et le framework qui fait tourner ton site imagine toi ceux qui te lisent.
    Ce n'est pas possible tout simplement.
    Il faut que tu te formes préalablement aux outils qui sont en production chez toi et que tu reviennent poser des questions ciblées, sinon je ne vois pas comment cela aboutira à une solution viable.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2016
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Ok, merci pour les pistes déjà données dans les précédents messages. Je vais voir si je peux sortir quelque chose

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/04/2019, 08h31
  2. Réponses: 2
    Dernier message: 07/04/2017, 09h01
  3. Réponses: 7
    Dernier message: 17/09/2014, 11h30
  4. Parcourir des tables commençant par le même nom
    Par hugo59330 dans le forum Macro
    Réponses: 8
    Dernier message: 03/09/2013, 10h28
  5. Réponses: 5
    Dernier message: 13/04/2010, 11h50

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