Duams: in array suchen

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

  1. 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

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. 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

      1. beim zweiten problem hat mir php.net geholfen

        lg
        Dumas

      2. 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
        
        1. 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

          1. 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

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
  2. 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

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. 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

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. is leider nicht umbaubar, zumindetens nicht sinnvoll!

        lg
        Dumas