Seite 1 von 1

Array sortieren mit asort() und der Schlüssel

Verfasst: 06.05.2004 23:44
von PhilippK
Hallo zusammen,

hier ein Code-Ausschnitt aus der posting.php:

Code: Alles auswählen

			$tracking_topics = ( !empty($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) : array();
			$tracking_forums = ( !empty($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) : array();

			if ( count($tracking_topics) + count($tracking_forums) == 100 && empty($tracking_topics[$topic_id]) )
			{
				asort($tracking_topics);
				unset($tracking_topics[key($tracking_topics)]);
			}
Es geht mir um die Zeile

Code: Alles auswählen

unset($tracking_topics[key($tracking_topics)]);
Was macht die genau bzw. wieso macht sie das?
Mit asort wird das Array sortiert (wobei das Array als Schlüssel die ID des Topics und als Wert den Zeitstempel des letzten Aufrufs des Themas hat). Demnach müsste der älteste (und damit kleinste) Zeitstempel zuerst kommen.
Dann wird in der Zeile ein Wert aus dem Array gelöscht und zwar der, auf den derzeit der interne Zeiger zeigt. Die Frage ist nur: auf welchen Zeigt der an dieser Stelle?

Gruß, Philipp

Verfasst: 07.05.2004 10:02
von QCO
Also folgender Code

Code: Alles auswählen

$fruits = array ("d"=>"Zitrone", "a"=>"Orange", "b"=>"Banane", "c"=>"Apfel", "e"=>"Kiwi");
print_r($fruits);
echo '<br>';
asort ($fruits);
echo "key(): " . key($fruits);
echo '<br>';
print_r($fruits);
führt bei mir zu dieser Ausgabe:

Code: Alles auswählen

Array ( [d] => Zitrone [a] => Orange [b] => Banane [c] => Apfel [e] => Kiwi )
key(): c
Array ( [c] => Apfel [b] => Banane [e] => Kiwi [a] => Orange [d] => Zitrone )
Ich schlussfolgere daraus mal, dass nach asort der interene Zeiger auf dem ersten Index liegt und demzufolge bei deinem Code der älteste Eintrag gelösch wird...