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 :

comment changer l'index d'un array


Sujet :

Langage PHP

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut comment changer l'index d'un array
    Bonjour à tous,

    Je contruit une array de cette manière
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    	while($row = $sql_result->fetch_assoc()){
    		//print_r($row);
    		$id_colect = (int)$row['id_collection'];
     
    		$collections[$id_colect]['field'] = $row['field_name'];
    		$collections[$id_colect]['station'] = $row['station_name'];
    		$collections[$id_colect]['id_station'] = $row['id_station'];
    		$collections[$id_colect]['time'] = $row['collection_date'];
    		$collections[$id_colect]['collection'] = $row['id_collection'];
     
    		if(!array_key_exists($row['sensor_type_longname'], $collections[$id_colect])){
    			$collections[$id_colect][$row['sensor_type_longname']] = $row['value'];
    		}
    	}
    Ca fonctionne très bien.

    Le problème est l'index de l'array comment par 1. Vu qu'elle dépend de l' id_collect, il peux commencer par 1 comme par 50. Cette manière de procéder me permets de faire un tableau multidimentionnel par id des collection de mesure et je ne souhaite pas changer ceci.

    Par contre, j'aimerais que mes index change et commence de 0.

    Si je loop $collection
    Code PHP : 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
     
    echo "<ul>";
    		foreach($collections as $t => $tt){
    			echo "<li>collection id: ".$t.": ";
    			echo "<ul>";
    			foreach($tt as $u => $uu){
    				echo "<li>";
    				echo $u." => ".$uu;
    				echo "</li>";
     
    			}
    			echo "</ul>";
    			echo "</li>";
    		}
    		echo "</ul>";
     
     
    	echo "<ul>";
    Il m'affiche ceci
    collection id: 1:
    field => Die Farm
    station => pond7A
    id_station => 1
    time => 2017-10-17 00:00:00
    collection => 1
    Waterlevel => 822.8850
    Waterlevel normalized => 4.1293
    Heatflux Shallow => 0.0000
    Heatflux Bottom => 2.3944
    T-Air => 8.8600
    T-Surface => 13.8600
    T-30mm => 14.6400
    T-60mm => 14.6500
    T-100mm => 14.6400
    T-200 => 14.6400
    T-500mm => 14.7000
    T-1200 => 14.6300
    collection id: 2:
    field => Die Farm
    station => pond7A
    id_station => 1
    time => 2017-10-17 00:00:00
    collection => 2
    Waterlevel => 822.9023
    Waterlevel normalized => 4.1466
    Heatflux Shallow => 0.0000
    Heatflux Bottom => 2.5725
    T-Air => 8.8800
    T-Surface => 13.8400
    T-30mm => 14.6100
    T-60mm => 14.6300
    T-100mm => 14.6300
    T-200 => 14.6100
    T-500mm => 14.7000
    T-1200 => 14.6100
    collection id: 3:
    field => Die Farm
    station => pond7A
    id_station => 1
    time => 2017-10-17 00:20:00
    collection => 3
    Waterlevel => 822.8328
    Waterlevel normalized => 4.0771
    Heatflux Shallow => 0.0000
    Heatflux Bottom => 2.4983
    T-Air => 8.6600
    T-Surface => 14.0200
    T-30mm => 14.5700
    T-60mm => 14.6100
    T-100mm => 14.6100
    T-200 => 14.6000
    T-500mm => 14.5800
    T-1200 => 14.6000
    J'ai besoin de modifier ainsi
    collection id: 0:
    field => Die Farm
    station => pond7A
    id_station => 1
    time => 2017-10-17 00:00:00
    collection => 1
    Waterlevel => 822.8850
    Waterlevel normalized => 4.1293
    Heatflux Shallow => 0.0000
    Heatflux Bottom => 2.3944
    T-Air => 8.8600
    T-Surface => 13.8600
    T-30mm => 14.6400
    T-60mm => 14.6500
    T-100mm => 14.6400
    T-200 => 14.6400
    T-500mm => 14.7000
    T-1200 => 14.6300
    collection id: 1:
    field => Die Farm
    station => pond7A
    id_station => 1
    time => 2017-10-17 00:00:00
    collection => 2
    Waterlevel => 822.9023
    Waterlevel normalized => 4.1466
    Heatflux Shallow => 0.0000
    Heatflux Bottom => 2.5725
    T-Air => 8.8800
    T-Surface => 13.8400
    T-30mm => 14.6100
    T-60mm => 14.6300
    T-100mm => 14.6300
    T-200 => 14.6100
    T-500mm => 14.7000
    T-1200 => 14.6100
    collection id: 2:
    field => Die Farm
    station => pond7A
    id_station => 1
    time => 2017-10-17 00:20:00
    collection => 3
    Waterlevel => 822.8328
    Waterlevel normalized => 4.0771
    Heatflux Shallow => 0.0000
    Heatflux Bottom => 2.4983
    T-Air => 8.6600
    T-Surface => 14.0200
    T-30mm => 14.5700
    T-60mm => 14.6100
    T-100mm => 14.6100
    T-200 => 14.6000
    T-500mm => 14.5800
    T-1200 => 14.6000
    et faire e sorte que mon nouveau array "rafraichi" commence toujours par 0

    Est-ce qu'il y a une fonction que peut réinitier mes index pour partir de 0?

    Merciiii
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    array_values()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    J'ai peut-être raté un truc, mais avant ta boucle while, ton tableau $collections est bien vide?
    Donc si tu veux l'indexer à partir de 0, ça ne sert à rien de définir $id_colect à chaque tour de boucle, il suffit d'ajouter un item supplémentaire à ton tableau et l'indexation à partir de 0 se fera naturellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $collections = [];
     
    while ( $row = $sql_result->fetch_assoc() ) {
        $temp = [ 'field' => $row['field_name'],
                  'station' => $row['station_name'],
                  'id_station' => $row['id_station'],
                  'time' => $row['collection_date'],
                  'collection' => $row['id_collection'] ];
     
        if ( !array_key_exists($row['sensor_type_longname'], $temp) )
            $temp[$row['sensor_type_longname']] = $row['value'];
     
        $collections[] = $temp;
    }
    Si tu souhaites que ton tableau soit ordonné par id_collection, rien ne t'empêche de le trier avec usort par la suite (mais le mieux est de le demander dans ta requête SQL).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    une méthode très classique :
    (peut-être un peu plus facile à comprendre/utiliser pour un débutant que la méthode de CosmoKnacki)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	$ii = 0;
    	while($row = $sql_result->fetch_assoc())
    	{
    		$collections[$ii]['field'] = $row['field_name'];
    		$collections[$ii]['station'] = $row['station_name'];
    		$collections[$ii]['id_station'] = $row['id_station'];
    		$collections[$ii]['time'] = $row['collection_date'];
    		$collections[$ii]['collection'] = $row['id_collection'];
     
    		if(!array_key_exists($row['sensor_type_longname'], $collections[$ii])){
    			$collections[$ii][$row['sensor_type_longname']] = $row['value'];
    		}
    		$ii++; // on incrémente
    	}

    Cette manière de procéder me permets de faire un tableau multidimentionnel par id des collection de mesure et je ne souhaite pas changer ceci.
    OUPS ! Pas vu.....
    Dernière modification par Invité ; 27/02/2018 à 10h07.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Bonjour,
    Je vous remercie pour vos réponses.

    Alors j'ai comme ceci, c'est peut etre pas propre, mais ca marche:
    Code PHP : 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
     
     
    $coll = array();
    	$collections = array();
     
     
    	while($row = $sql_result->fetch_assoc()){
     
    		$id_colect = (int)$row['id_collection'];
     
    		$coll[$id_colect]['field'] = $row['field_name'];
    		$coll[$id_colect]['station'] = $row['station_name'];
    		$coll[$id_colect]['id_station'] = $row['id_station'];
    		$coll[$id_colect]['time'] = $row['collection_date'];
    		$coll[$id_colect]['id_collection'] = $row['id_collection'];
     
    		if(!array_key_exists($row['sensor_type_name'], $coll[$id_colect])){
    			$coll[$id_colect][$row['sensor_type_name']] = $row['value'];
    		}
    	}
     
     
    	$i=0;
     
    	foreach($coll as $t => $tt){
    		foreach($tt as $u => $uu){
    			$collections[$i][$u]=$uu;
    		}
    		$i++;
    	}

    Je veias étudier vos porpositions

    @jreaux62,
    J'avais déjà essayé ta proposition mais elle ne marche pas, car à chaque loop du while, il extrait une nouvelle mesure d'une même collection de mesure.
    C'est pourquoi j'ai utilisé la fonction array_key_exists() pour ne pas ajouter à l'array, une mesure qui existe déjà.

    Comme ceci, ca fonctionne mais je vais encore étudier vos propositions pour faire meiux....

    Merci!!!!
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  6. #6
    Invité
    Invité(e)
    Par défaut
    REFLECHIS BIEN avant de coder.

    Quand ça devient trop complexe, c'est peut-être qu'il y a une meilleure solution.


    Et souviens(toi que sont sont les id (auto-incrément) qui font les liaisons entre les différentes tables.
    SEULS ces id peuvent identifier de manière sûre et unique chaque ligne.

    Toutes les autres données (name,...) sont des "informations", que tu peux collecter, mais dont il ne faut pas se servir pour identifier une ligne d'une table.

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

Discussions similaires

  1. Comment changer l'index d'un élément ?
    Par Toufik83 dans le forum jQuery
    Réponses: 2
    Dernier message: 04/08/2016, 12h58
  2. comment changer la position de l'index primaire
    Par pierrot67 dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/06/2007, 19h30
  3. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 07/04/2004, 23h42
  4. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53
  5. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46

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