Page 1 sur 1

organiser ARRAY à (3) trois dimensions ou plus

Posté : 31 janv. 2012, 14:36
par gandaFULLofGanja
Bonjour à tous !! :mrgreen:

j'ai un array comme ceci :

Code : Tout sélectionner

$myArray[0][0]['priority']=1; $myArray[0][1]['priority']=4; $myArray[0][2]['priority']=2; $myArray[0][3]['priority']=3; $myArray[1][0]['priority']=3; $myArray[1][1]['priority']=2; $myArray[1][2]['priority']=3; $myArray[1][3]['priority']=1;
la clé 'priority' n'est qu'une clé parmis les 13, comme ceci :

Code : Tout sélectionner

$myArray[0][0]['id_fiche'] = numbers $myArray[0][0]['nom'] = string $myArray[0][0]['priority'] = numbers $myArray[0][0]['id_p'] = numbers $myArray[0][0]['p_ES'] = string $myArray[0][0]['p_FR'] = string $myArray[0][0]['p_EN'] = string $myArray[0][0]['spe'] = numbers $myArray[0][0]['rep'] = string $myArray[0][0]['id_muni'] = numbers $myArray[0][0]['id_zone'] = numbers $myArray[0][0]['id_cuidad'] = numbers $myArray[0][0]['id_tipo_e'] = numbers
j'essai de reorganiser par la clé 'priority' qui ne contient que des chiffres de 1 à 4

j'ai essayé bien des functions trouvés sur le net, mais rien ne fonctionne, car ma version de PHP est 5.2.14 et la function qui pourrai marcher necessite la version 5.3 minimum

donc mon idée serai de re ecrire cette fameuse fonction de façon à ce qu'elle fonctionne sous php 5.2.14

voici la function en question :

Code : Tout sélectionner

usort($myArray,function($a,$b){ return $a[0]['priority']-$b[0]['priority']; })
je vois pas trop comment proceder, j'ai fais de nombreux tests, mais rien n'y fais !!

auriez-vous une idée de comment m'y prendre ?

merci beaucoup ! :D

Re: organiser ARRAY à (3) trois dimensions ou plus

Posté : 01 févr. 2012, 13:53
par Calimero
Tu peux oublier les scripts tout faits du net et le faire toi-même en quelques minutes.

La base c'est d'écrire la double boucle (foreach) imbriquée qui te permet d'accéder à l'index priority. A partir de là tu peux construire un nouveau tableau qui aura la structure de ton choix (en te servant par exemple de la valeur priority comme premier index).

Quelquechose comme ça :
$new = array(); // le nouveau tableau

foreach($myArray as $a=>$b){
  foreach($b as $c=>$d){
    $new[$d['priority']][$a][$c]=$d;
  }
}

Re: organiser ARRAY à (3) trois dimensions ou plus

Posté : 01 févr. 2012, 16:31
par sirakawa
Il y a ça dans le manuel: http://fr2.php.net/manual/fr/function.a ... tisort.php
//A very simple way to sort arrays with this kind of structure.
<?php
    $myArray =array(
        array("NUMCIE" => "001","REF" => "RXL","COLOR" => "RED","L1" => 4),
        array("NUMCIE" => "001","REF" => "RXL","COLOR" => "BLUE","L1" => 6),
        array("NUMCIE" => "001","REF" => "RHQ","COLOR" => "RED","L1" => 4),
        array("NUMCIE" => "002","REF" => "RXL","COLOR" => "YELLOW","L1" => 8));
       
       
    foreach($myArray as $c=>$key) {
        $sort_numcie[] = $key['NUMCIE'];
        $sort_ref[] = $key['REF'];
        $sort_color[] = $key['COLOR'];
    }

    array_multisort($sort_numcie, SORT_ASC, $sort_ref, SORT_STRING, $myArray);
    print_r($myArray);
   
?>  

Re: organiser ARRAY à (3) trois dimensions ou plus

Posté : 22 févr. 2012, 17:12
par gandaganda
Tu peux oublier les scripts tout faits du net et le faire toi-même en quelques minutes.

La base c'est d'écrire la double boucle (foreach) imbriquée qui te permet d'accéder à l'index priority. A partir de là tu peux construire un nouveau tableau qui aura la structure de ton choix (en te servant par exemple de la valeur priority comme premier index).

Quelquechose comme ça :
$new = array(); // le nouveau tableau

foreach($myArray as $a=>$b){
  foreach($b as $c=>$d){
    $new[$d['priority']][$a][$c]=$d;
  }
}
merci beaucoup pour cette réponse, j'ai été tres pris dernièrement c'est pour ça que je ne suis pas revenu par ici,
d'ailleur, on en a profité pour supprimer mon compte !! merci bien phpfrance :roll:

bref, j'ai testé cette forme de réorganisation, mais ça change totalement la structure, en fait je me rend compte que je me suis mal exprimé, car mon but n'est pas de "restructurer" le tableau, mais simplement trier par le champ priority en ordre criossant

pour mettre les choses au clair et faire simple, voici quelques examples qui parlent mieux que moi :mrgreen: :

example avant organisation :

Image

example après organisation (restructuration) suggerée par Calimero :

Image

example du resultat recherché :

Image


je sais que ça parait simple, mais concrètement ça ne l'est pas tant que ça :mrgreen:

bref, j'en suis à me dire que peut-être je devrai re écrire tout le script #-o

qu'en pensez-vous ?

est-il pertinent de continuer dans cette voie ? ou bien re écrire tout le script ?

8-|

merci à tous

Re: organiser ARRAY à (3) trois dimensions ou plus

Posté : 22 févr. 2012, 17:20
par gandaganda
:D yeah !

ça y est j'ai réussi ! (pas tout à fait)

merci a tout un tas de gens qui proposent des scripts qui ne correspondent pas forcément mais qui permettent de comprendre petit à petit et d'experimenter :mrgreen:

voici comment j'ai fais :

$totalMoinsUN=$the_contII-1; //le total d'entrée dans mon array, moins 1 sinon ça rajoute une entrée vide

for( $i=0; $i<=$totalMoinsUN; $i++ ){ //on extrait chaque clé et toutes ses valeurs dans nouveaux tableaux
   $priority[] = $liste_IDRESTOS_plat[0]["$i"]['priority'];     
   $id_plato[] = $liste_IDRESTOS_plat[0]["$i"]['id_plato'];
   //etc...
};

sort( $priority ); //haha

for( $i=0; $i<=$totalMoinsUN; $i++ ){ //on recré le tableau original mais trié !!!
   $liste_IDRESTOS_plat[0]["$i"]['priority'] = $priority["$i"];
   $liste_IDRESTOS_plat[0]["$i"]['id_plato'] = $id_plato["$i"];
  //etc...
};
pour ceux que ça interesse, j'ai laissé la première clé sur 0, mais il suffit de boucler pour acceder au reste, j'ai fais comme ça pour les tests

sujet (pas encore) résolu :P

merci Calimero, merci sirakawa

Re: organiser ARRAY à (3) trois dimensions ou plus

Posté : 22 févr. 2012, 17:30
par gandaganda
aïe aïe aïe ! #-o

en fait, après verification, je change seulement la valeur d'un clé, mais je ne garde pas les associations !

comment faire ?

j'ai extrait chaque cle et ses valeurs dans un nouveaux tableau, mais je ne tri que le tableau PRIORITY, comment garder l'association ?

bon, en fait c'etait pas si compliqué, un petit tour sur php,net et voilà :
array_multisort($priority, $id_ficheclient, $id_plato etc...);

Re: organiser ARRAY à (3) trois dimensions ou plus

Posté : 22 févr. 2012, 18:42
par Calimero
La fonction que t'avait d'ailleurs indiquée sirakawa ;-)

Bravo à toi, c'est assez rare de voir quelqu'un s'en sortir avec array_multisort().