organiser ARRAY à (3) trois dimensions ou plus

gandaFULLofGanja
Invité n'ayant pas de compte PHPfrance

31 janv. 2012, 14:36

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

ViPHP
ViPHP | 2287 Messages

01 févr. 2012, 13:53

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;
  }
}
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 2278 Messages

01 févr. 2012, 16:31

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);
   
?>  
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 5 Messages

22 févr. 2012, 17:12

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

Petit nouveau ! | 5 Messages

22 févr. 2012, 17:20

: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
Modifié en dernier par gandaganda le 22 févr. 2012, 17:31, modifié 1 fois.

Petit nouveau ! | 5 Messages

22 févr. 2012, 17:30

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...);

ViPHP
ViPHP | 2287 Messages

22 févr. 2012, 18:42

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().
if(!@work()){ Nespresso(); } else { what(); }
______________________________