in array suchen
Duams
- php
Hi!
Wie kann ich in einem Array nach einem value suchen und das jeweilige Array ausgeben?
Ich bin auf den Code gekommen, aber das muss performanter gehn....
$search = 5; // Robert
$persons = array();
$persons['0']['id'] = 5;
$persons['0']['name'] = "Robert";
...
$persons['0']['id'] = 2;
$persons['0']['name'] = "Roland";
...
$persons['0']['id'] = 6;
$persons['0']['name'] = "Johannes";
...
foreach ( $persons as $person ) {
if($person['id']==$search)
$found = $person;
}
echo $found['salutation'].$found['name'];
Vielen Dank!
Dumas
Hi,
Wie kann ich in einem Array nach einem value suchen und das jeweilige Array ausgeben?
Ich bin auf den Code gekommen, aber das muss performanter gehn....$persons = array();
$persons['0']['id'] = 5;
$persons['0']['name'] = "Robert";
Wenn du die ID (die ja wohl eindeutig sein wird?) nicht als Element im Array ablegen, sondern als Schlüssel verwenden würdest - dann könntest du mittels isset ganz einfach prüfen, ob ein Eintrag mit dem gesuchten Schlüssel existiert, und wenn ja dann anschliessend ganz einfach über diesen Schlüssel auf die darunter abgelegten Daten zugreifen.
MfG ChrisB
das geht leider nicht, ich wollte das ganze möglichst einfach darstellen, in echt werden in de array mehrere ids für verknüpfte Modelle gespeichert...
aber ich hab nen Fehler gemacht, das Array sollte natürlich so aussehn:
$persons = array();
$persons['0']['id'] = 5;
$persons['0']['name'] = "Robert";
...
$persons['1']['id'] = 2;
$persons['1']['name'] = "Roland";
...
$persons['2']['id'] = 6;
$persons['2']['name'] = "Johannes";
...
Ich hab gleich noch ne zweite Frage:
wie kann ich innerhalb einer foreach-Schleife den Arraynamen herausfinden. Bsp:
foreach ( $persons as $person ) {
if($person['id']==5)
// hier würd ich gern den Arraykey '0' auslesen
}
danke
Dumas
beim zweiten problem hat mir php.net geholfen
lg
Dumas
Hallo,
das geht leider nicht, ich wollte das ganze möglichst einfach darstellen, in echt werden in de array mehrere ids für verknüpfte Modelle gespeichert...
wenn das nicht geht, was bleibt Dir übrig als eine lineare Suche?
foreach ( $persons as $person ) {
if($person['id']==5)
// hier würd ich gern den Arraykey '0' auslesen
// Eintrag gefunden, restliche Arrayelemente
// müssen nicht mehr betrachtet werden.
[link:http://www.php.net/manual/de/control-structures.break.php@title=break];
// dadurch hast Du im Schnitt n/2 Suchoperationen,
// was immer noch O(n) ist :-(
// siehe auch Diskussion in [pref:t=184300;m=1221623]
}
Einen echten Performancegewinn gibt das natürlich nicht.
Freundliche Grüße
Vinzenz
Hi!
Es handelt sich bei mir eh immer nur um n<10, also halb so schlimm,
ich hätte nur auf einen kürzeren code gehofft, alla
$found = array_key_sreach($search,$persons);
naja, kann man nix machen
Vielen Dank!
Dumas
Hello,
Es handelt sich bei mir eh immer nur um n<10, also halb so schlimm,
ich hätte nur auf einen kürzeren code gehofft, alla
$found = array_key_sreach($search,$persons);naja, kann man nix machen
Doch! Umbauen!
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hello,
Wie kann ich in einem Array nach einem value suchen und das jeweilige Array ausgeben?
Ich bin auf den Code gekommen, aber das muss performanter gehn....[code lang=php]$search = 5; // Robert
$persons = array();
$persons['0']['id'] = 5;$persons['0']['name'] = "Robert";
...
$persons['0']['id'] = 2;
$persons['0']['name'] = "Roland";
...
$persons['0']['id'] = 6;
$persons['0']['name'] = "Johannes";
Wenn sich die Struktur unter Berücksichtigung der Schlüsselkorrektur *g* auf diese Art hier beschränkt, dann würde ich sie anders herum aufbauen:
$_persons = array();
$_persons['id'] = array();
$_persons['name'] = array();
$_persons['age'] = array();
$_persons['id'][0] = 5;
$_persons['name'][0] = "Robert";
$_persons['age'][0] = 20;
$_persons['id'][1] = 2;
$_persons['name'][1] = "Roland";
$_persons['age'][1] = 25;
$_persons['id'][2] = 6;
$_persons['name'][2] = "Johannes";
$_persons['age'][2] = 19;
Das hat den Vorteil, dass Du jedes Teilarray (id, nam, age) sortieren kannst.
Für den Zugriff auf die Daten, das Hinzufügen und Löschen benötigst Du dann zwar eine kleine Funktion, aber die ist jeweils sehr einfach und außerdem wiederverwendbar definierbar. Da habe ich im Archiv schon genügend Beispiele hinterlassen ;-)
Die Performanz für den Gesamtzugriff ist durch diesen andersartigen Aufbau nicht merklich anders.
Die Sortierbarkeit, die Bildung von Summen, Mittelwerten, Durchschnitten, Finden von Maximun, Minimum usw. der einzelnen "Spalten" ist aber dafür mit den vorhandenen Arrayfunktionen von PHP machbar, und das ist gegenüber einer User-Callbackfunction erheblich performanter.
Da Elemente in PHP-Arrays ohnehin alle diskret angelegt werden, Subarrays also nicht als geschlossene Strukturen, sondern als Einzelelemente angelegt werden, erwarte ich aich auch hier keinen messbaren wesentlichen Performanceunterschied.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hello,
$_persons = array();
$_persons['id'] = array();
$_persons['name'] = array();
$_persons['age'] = array();$_persons['id'][0] = 5;
$_persons['name'][0] = "Robert";
$_persons['age'][0] = 20;$_persons['id'][1] = 2;
$_persons['name'][1] = "Roland";
$_persons['age'][1] = 25;$_persons['id'][2] = 6;
$_persons['name'][2] = "Johannes";
$_persons['age'][2] = 19;Das hat den Vorteil, dass Du jedes Teilarray (id, nam, age) sortieren kannst.
Den anderen Vorteil habe ich gar nicht erwähnt:
Das Array nimmt so herum i.d.R. den geringeren Speicherplatz ein im Hauptspeicher, mindestens aber als Serialisiertes Array in der Session oder sonstigen Datei.
Das gilt immer dann, wenn der "Spaltenname" ein Name ist, und nicht auch nur ein kurzer numerischer Schlüssel!
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
is leider nicht umbaubar, zumindetens nicht sinnvoll!
lg
Dumas