array_multisort Problem

Tim C.

Erfahrenes Mitglied
Tach zusammen,

und ja auch ein Mod braucht mal Hilfe ;)

Also ich habe ein mehrdimensionales Array vorliegen, dass folgende Struktur hat.

$array[name]([v1]-[v4])

Sprich in der ersten Dimension liegen die Namen und jedem Namen sind vier weitere Elemente zugeordnet, die dann Werte haben.

Wie stelle ich es an, dass das ganze Array nach einem Wert der zweiten Dimension absteigend sortiert wird ?

Wenn ich dazu das Array besser anders anlegen sollte, nur raus damit, sollte auch kein zu großes Problem darstellen.
 
Ich weiss jetzt nicht wie du genau sotieren willst?
Alle Elemente der 2. Ebene von allen der 1. ebene?

also
$a = array("a","b","c");
$a[0] = array("a1","a2","a3");
$a[1] = array("b1","b2","b3");

soll sotiert und ausgegeben werden:

a1,a2,a3,b1,b2,b3 ...

?

Code:
foreach($a as $k => $v) {
     $temp[] = $v;
}
sort($temp);
foreach($temp as $k => $v) {
     echo $v;
}

bzw
Code:
foreach($a as $k => $v) {
  if(isset($old))
          $old = array_merge($old,$v);
  else
          $old = $v;
}
sort($temp);
foreach($temp as $k => $v) {
     echo $v;
}

oder wolltest du etwas anderes?
 
Nein ich glaube so meinte ich es nicht. Pass auf gehen wir mal davon aus, [name] ist der Name des Tieres und v1 bis v4 sind länge, breite, höhe und gewicht.

Jetzt soll er mir das ganze Array nach Gewicht sortieren, so dass das schwerste Tier oben steht.
 
Habs eben mal in Java Programmiert. Das ordnet mir die 3 Tiere
so wie du das haben willst. Umschreiben in PHP sollte kein Problem darstellen

Code:
public class Tier {

 
	public static void main(String[] args) {
		ArrayList zoo = new ArrayList();
		ArrayList haase = new ArrayList(2); 
		haase.add("Haase");
		haase.add(new Integer(5));
		ArrayList fuchs = new ArrayList(2);
		fuchs.add("Fuchs");
		fuchs.add(new Integer(15));
		ArrayList tiger = new ArrayList(2);
		tiger.add("Tieger");
		tiger.add(new Integer(225));
		zoo.add(haase);
		zoo.add(tiger);
		zoo.add(fuchs);
		Iterator itter = zoo.iterator();
		ArrayList last = null;
		ArrayList sort = new ArrayList();
		for(int i=0;i<zoo.size();i++){
		 while(itter.hasNext()) {
		   ArrayList tmp = (ArrayList)itter.next();
		   if(last!=null) {
	           int tmp_weight = ((Integer)tmp.get(1)).intValue();
	           int last_weight = ((Integer)last.get(1)).intValue();	  
	           if(tmp_weight>=last_weight) {
	                  sort.add(tmp);
	           } else {
	           	      sort.add(sort.indexOf(last),tmp);
	           } 	
		   } else {
		   	  sort.add(tmp);
		   }
		   last = tmp;
	     }
	      zoo = sort;	
		}
        Iterator itterS = sort.iterator();
        while(itterS.hasNext()) {
		    ArrayList tmp = (ArrayList)itterS.next();
            System.out.println("Name:"+tmp.get(0)+"\tweight:"+tmp.get(1));
	    }
	}
}

Ausgabe:
Name:Haase weight:5
Name:Fuchs weight:15
Name:Tieger weight:225

Jetzt hat mich irgendjemand gleich weil es viel leistungsfähigere Algorythmen gibt, aber wenn du nicht gerade mit millionen von Tieren zu tun hast, sollte das kein Problem darstellen ;)
 
-

PHP:
$r = sizeof($array);
for($i=$r;$i--;$i>1) {
  for($j=0;$j++;$j<=$i-1 {
    if( $array['$j']['v4'] > $array['$j']['v4']) {
      $temp = $array['$j'];
      $array['$j'] = $array['$j+1'];
      $array['$j+1'] = $temp;
    }
  }
}
Ist jetzt mit BubbleSort umgesetzt, funktioniert aber auch mit jedem anderen Sortieralgorithmus.
 
Zurück