Webdesign in Siegen

Länge von Array Keys bestimmen

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Länge von Array Keys bestimmen

Beitragvon Avedo am 09.01.2008, 00:29

Abend!
Ich habe da ein kleines Problem. Ich habe ein Array
Code: Alles auswählen
<?php
  $blumen = array(
   "rot"=>"Rose",
   "rosa"=>"Tulpe",
   "weiss"=>"Nelke",
   "lilablassblau"=>"Sonnenblume");
  ?>

Nun möchte ich bestimmen wie lang der längste Key (in diesem Fall lilablassblau) der längste in diesem Array ist. Ich weiß, dass es für solche Sachen max() und strlen () gibt, aber ich weiß nicht, wie ich die hier einbauen soll. Könnte mir da jemand helfen. Will also nur die Länge des längsten Keys zurückgegeben haben.
MfG, Andy
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 554
Registriert: 09.12.2007
Wohnort: Göttingen

Re: Länge von Array Keys bestimmen

Beitragvon Ingo am 09.01.2008, 01:09

Hi. - Meine erste Idee:
Code: Alles auswählen
  $res=0;

  foreach($blumen as $k => $v)
    if(strlen($k)>$res) $res = strlen($k);                   // Edit: Fehler "$" behoben :o)
      
   //  $res enthält nun die Länge des längsten Keys in $blumen   

so ungefähr; eher universell nutzbar ... wobei $res Null bleibt, wenn das Array leer ist.
Oder aber einfach so:
Code: Alles auswählen
$res = max(array_keys($blumen));         // Quark! siehe nä. Posting 

Gruß, Ingo
Zuletzt geändert von Ingo am 09.01.2008, 16:11, insgesamt 2-mal geändert.
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 580
Registriert: 01.04.2007
Wohnort: Neuss/NRW

Re: Länge von Array Keys bestimmen

Beitragvon Avedo am 09.01.2008, 01:29

Vielen Dank für deine schnelle Antwort. Die erste Methode hat nach kurzer Korrektur wunderbar funktioniert. Auf die zweite war ich auch gekommen jedoch liefert die statt "13" - "weiss" zurück.
Hier nochmal dein korrigierter Code:
Code: Alles auswählen
$res=0;

foreach($blumen as $k => $v)
{
   if(strlen($k)>$res)
   {
      $res = strlen($k);
   }
}

MfG, Andy
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 554
Registriert: 09.12.2007
Wohnort: Göttingen

Re: Länge von Array Keys bestimmen

Beitragvon Manuel am 09.01.2008, 02:27

Hi Andy!

Was hast du denn da bis auf die Formatierung geändert? ;)

Ich denke die andere Funktion liefert "weiss", da "weiss" das Maximum ist. (w ist der hinterste Anfangsbuchstabe im Alphabet)

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8789
Registriert: 10.12.2004
Wohnort: Asbach

Re: Länge von Array Keys bestimmen

Beitragvon SilentStormer am 09.01.2008, 10:53

Er hat strlen() statt $strlen() geschrieben ;)
Bild
Benutzeravatar
SilentStormer
Mitglied
 
Beiträge: 384
Registriert: 24.09.2005
Wohnort: Österreich

Re: Länge von Array Keys bestimmen

Beitragvon Ingo am 09.01.2008, 16:09

Hi.
Avedo hat geschrieben:Auf die zweite war ich auch gekommen jedoch liefert die statt "13" - "weiss" zurück.

Richtig! Methode 2 ist so natürlich Quatsch :oops: - folgendes sollte aber klappen:
Code: Alles auswählen
$res = max(array_map('strlen',array_keys($blumen)));

Also: Erst die Keys beschaffen, diese dann mit map/strlen in ein Array von Längen wandeln und schließlich
das Maximum feststellen. - Ist auch nicht viel kürzer als Methode 1, aber ich finde array_map 'ne interessante
Funktion :lol:
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 580
Registriert: 01.04.2007
Wohnort: Neuss/NRW

Re: Länge von Array Keys bestimmen

Beitragvon Manuel am 09.01.2008, 16:14

Dann kannst du höchstens mit einem Profiler schauen welche Funktion schneller ist... ;)
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8789
Registriert: 10.12.2004
Wohnort: Asbach

Re: Länge von Array Keys bestimmen

Beitragvon Avedo am 09.01.2008, 19:04

Naja ich finde die neue Variante deutlich übersichtlicher verkürzt meine Methode auch um einiges, denn ich muss diesen Codeschnipsel zweimal ausführen. Einmal für die Keys und einmal für die Values. Da hab ich auch gleich noch eine Frage. berechne mit Hilfe dieser Abfrage den Seitenabstand von einem Koordinatensystem zum Bildrand. (Man merkt ich bastle eine Chart-Class) Das Araay ist dabei wie folgt aufgebaut:
Code: Alles auswählen
<?php
$var = array(x => y);
?>

Da ich einen gleichmäßigen Seitenabstand möchte berechne ich die Länge des Längsten Array-Keys und -Values, addiere 5 und nehme es mit der größe der schriftart, die ich mit imagefontwidth(1) berechne, mal. So gibt diese Methode eine Variable $gab, die den Seitenabstand enthält zurück. Nun die Frage ich muss doch bei der Ermittlung der Value-Stringlänge nur das array_keys() durch array_values ersetzen? oder?
Code: Alles auswählen
$x = max(array_map('strlen',array_keys($var)));          //berechnung für keys
$y = max(array_map('strlen',array_values($var)));          //berechnung für values

MfG, Andy
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 554
Registriert: 09.12.2007
Wohnort: Göttingen

Re: Länge von Array Keys bestimmen

Beitragvon Ingo am 09.01.2008, 23:53

Hi.
Ja, das mit array_values sollte klappen; hab's gerade mal probiert.

PS: Just for fun: Ich hab noch 'was probiert - Stichwort Profiler: Die foreach-Methode
ist zwar syntaktisch länger, aber etwa doppelt so schnell wie die mit map. Das liegt
vllt. daran, dass der foreach-Weg nur 1 Schleife beinhaltet, der map-Weg aber 2 Schleifen
(1 x map und 1 x max); das sollte aber in der Praxis keine Rolle spielen: 1 Mio. Durchläufe
brauchen selbst auf meiner Maschine nur einige Sekunden :lol:

Gruß, Ingo
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 580
Registriert: 01.04.2007
Wohnort: Neuss/NRW


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast