Mehrdimensionales Array sortieren

wachteldonk

Erfahrenes Mitglied
hallo,

ich habe z.b:
PHP:
dtata[1]['vorname'] = "Frank"
dtata[1]['Nachname'] = "Meyer"
dtata[1]['Alter'] = 23

dtata[1]['vorname'] = "Peter"
dtata[1]['Nachname'] = "Puschel"
dtata[1]['Alter'] = 30

u.s.w.

Wie kann ich diese Daten korrekt nach dem Alter sorteiren?
 
PHP:
<pre>
<?php
// Sortiere nach Alter aufwärts
function sortByAgeAsc($a1, $a2)
{
	if($a1['alter'] == $a2['alter'])
	{
		return 0;
	}
	
	return $a1['alter'] > $a2['alter'] ? +1 : -1;
}

// Sortiere nach Alter abwärts
function sortByAgeDesc($a1, $a2)
{
	if($a1['alter'] == $a2['alter'])
	{
		return 0;
	}
	
	return $a1['alter'] > $a2['alter'] ? -1 : +1;
}

$array = array(array('name' => 'Peter', 'alter' => 23),
               array('name' => 'Walter', 'alter' => 50),
               array('name' => 'Micha', 'alter' => 19)
         );

print_r($array);

usort($array, 'sortByAgeAsc');

print_r($array);
?>
</pre>
 
Hallo,

wie ruf ich

PHP:
usort($array, 'sortByAgeAsc');


das auf, wenn sortAgebyAsc eine Methode der aktuellen Klasse sein soll?

mit $this,.. gehts anscheined nicht
 
PHP:
usort($array, array('Klassenname', 'Funktionsname');

// Z.B.
class Sort
{
    static public function sortByAgeAsc($a1, $a2)
    {
        if($a1['alter'] == $a2['alter'])
        {
            return 0;
        }
    
        return $a1['alter'] > $a2['alter'] ? +1 : -1;
    }
}

usort($array, array("Sort", "sortByAgeAsc"));
Wobei die Methode statisch sein sollte.
 
Static bedeutet, dass du innerhalb der statischen Funktion nicht auf die Klassenvariable $this zugreifen kannst/darfst. Dafür kannst du die Funktion auch aufrufen, wenn du keine Instanz der Klasse erstellt hast.
Hier nochmal ein Beispiel, wie du innerhalb der Klasse mit [phpf]usort[/phpf] arbeiten kannst.
PHP:
<?php
// Z.B.
class User
{
    static protected function sortByAgeAsc($a1, $a2)
    {
        if($a1['alter'] == $a2['alter'])
        {
            return 0;
        }
    
        return $a1['alter'] > $a2['alter'] ? +1 : -1;
    }
    
    public function printUserList($users = array())
    {
    	if(!empty($users))
    	{
    		// Sortieren
    		usort($users, array("User", "sortByAgeAsc"));
    		
    		// Ausgeben
    		echo '<pre>';
    		foreach($users as $user)
    		{
    			echo $user['name'], ' ist ', $user['alter'], " Jahre alt.\n";
    		}
    		echo '</pre>';
    	}
    }
}

$array = array(array('name' => 'Peter', 'alter' => 23),
               array('name' => 'Walter', 'alter' => 50),
               array('name' => 'Micha', 'alter' => 19)
         );

$users = new User;
$users->printUserList($array);
?>
 
Zurück