Array sortieren mit asort() und der Schlüssel

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Array sortieren mit asort() und der Schlüssel

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag 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...
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
Antworten

Zurück zu „Coding & Technik“