Objekte in einem Array sortieren

greenslot

Mitglied
Hallo zusammen,

ich hoffe, ihr könnt mir weiter helfen, ich bin nicht so der Experte in PHP.

Wie kann man Objekte in einem Array sortieren?

So:
PHP:
echo "<pre>";
print_r($Ergebnis);
echo "</pre>";

bekomme ich das Array:

PHP:
Array
(
    [0] => stdClass Object
        (
            [id] => 19
            [name] => Stefan
            [mail] => @
            [url] => http://www.google.de
            [street] => Allee 12
            [plz] => 12345
            [km] => 15.613210453369
        )
     [1] => stdClass Object
        (
            [id] => 21
            [name] => Manuel
            .
            .
            .   
            [km] => 11.307139774644


Ich würde gern das Array nach den Kilomentern [km] ordnen und anschließend geordnet ausgeben.
Ich habe leider keine Ahnung, wie genau das aussehen muss. Für ein normales Array habe ich schon eine Anleitung gefunden, aber die bringt hier leider kein Ergebnis. :(

Vielen vielen Dank für eure Hilfe!!
 
Das hier sollte dir weiterhelfen. Ein modifiziertes Beispiel von php.net: [phpf]usort[/phpf]

PHP:
<?php

$obj1 = new StdClass();
$obj1->km = 30;
$obj2 = new StdClass();
$obj2->km = 10;
$obj3 = new StdClass();
$obj3->km = 15;
$obj4 = new StdClass();
$obj4->km = 5;

$arr = array($obj1, $obj2, $obj3, $obj4);

function cmp($a, $b)
{

  if($a->km == $b->km)
  {
    return 0;
  }
  
  return ($a->km < $b->km) ? -1 : 1;
}
print_r($arr);

usort($arr, "cmp");

print_r($arr);
?>
 
Um es quick'n'dirty zu machen könntest du die Objekte in arrays umwandeln.
PHP:
foreach($Ergebnis as $key=>$value){
  $Ergebnis[$key] = (array)$Ergebnis[$key];
}
 
Hallo,

danke für eure Antworten.
Leider komme ich damit nicht klar.

Ich habe das jetzt so geschrieben:

PHP:
$arr = array($Ergebnis);
 
function cmp($a, $b)
{
 
  if($a->km == $b->km )
  {
    return 0;
  }
  
  return ($a->km < $b->km ) ? -1 : 1;
}
print_r($arr);
 
usort($arr, "cmp");
 
print_r($arr);

Es wird beides mal die selbe Reihenfolge ausgeben. km wird nicht berücksichtigt.

Wie komme ich denn dazu, dass $Ergebnis in die Objekte geteilt wird, wie hier:
array($obj1, $obj2, $obj3, $obj4); ?
 
Warum machst du aus dem array $Ergebnis einen weiteren Array?

$arr ist ein Array mit einem Eintrag. Dieser Eintrag ist ein Array mit den Objekten. Wenn du jetzt $arr sortierst, sortierst du einen einzelnen Eintrag.

Lass also mal die erste Zeile weg und ersetze überall $arr durch $Ergebnis

PS. Wenn du print_r($arr) genau ansiehst, solltest du das sehen.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück