Instanzen von Klassen in Arrays durchsuchen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Instanzen von Klassen in Arrays durchsuchen?

    Hallo,

    Ich hab ein kleines Problem.
    Ich hab eine Klasse "Kunde", in der Klasse gibt es einige Variablen.

    Und ich habe die Instanzen der Klasse in Arrays reingemacht.

    Gibt es jetzt eine Funktion, mit der ich die Variablen der Instazen durchsuchen kann? Wenn sie den gesuchten Begriff findet, soll sie mir den Key des Arrays ausgeben.

    Geht das?

    Hier ein Beispiel:

    Quellcode

    1. .
    2. .
    3. .
    4. class Kunde
    5. {
    6. private $name, $vorname, $tel;
    7. }
    8. $kunden['123'] = new Kunde("Mueller", "Fritz",
    9. "12345678",);
    10. .
    11. .
    12. .
    Alles anzeigen



    Wenn ich jetzt z.B. nach "Mueller" suche, soll es "123" ausgeben.

    Danke im Voraus
  • Auf Variablen die als private deklariert sind, kannst du logischerweise nicht von außen zugreifen. Ohne private wäre folgendes wohl eine Lösungsmethode, aber ich habe keine Ahnung, ob es da eine PHP-eigene Funktion gibt:

    Quellcode

    1. <?php
    2. class Kunde {
    3. public $name;
    4. public $vorname;
    5. public function __construct($name, $vorname){
    6. $this->name = $name;
    7. $this->vorname = $vorname;
    8. }
    9. }
    10. $array[1] = new Kunde("Müller", "Peter");
    11. $array[2] = new Kunde("Fritz", "Hans");
    12. $q = "Peter";
    13. foreach($array as $key => $kunde){
    14. if($kunde->name == $q){
    15. $hits[] = $key;
    16. break;
    17. }
    18. if($kunde->vorname == $q){
    19. $hits[] = $key;
    20. break;
    21. }
    22. }
    23. print_r($hits);
    24. ?>
    Alles anzeigen
  • Ich werfe einfach mal das Stichwort SPL in den Raum. Habe mal einen Lösungsansatz erstellt, der aber wahrscheinlich noch etwas ausgebaut werden muss:

    Quellcode

    1. <?php
    2. class Customer implements ArrayAccess {
    3. private $_costumerID = array();
    4. public function searchCostumer($query = '') {
    5. /**
    6. * Prüfe zusätzlich, ob Kunden mit identischen Daten vorhanden sind.
    7. */
    8. $hits = array();
    9. foreach ($this->_costumerID as $key => $row) {
    10. if (in_array($query, $row)) {
    11. $hits[] = $key;
    12. }
    13. }
    14. return count($hits) ? $hits : FALSE;
    15. }
    16. public function offsetExists($offset) {
    17. return array_key_exists($this->_costumerID, $offset);
    18. }
    19. public function offsetGet($offset) {
    20. return $this->_costumerID[$offset];
    21. }
    22. public function offsetSet($offset, $value) {
    23. if (is_null($offset)) {
    24. $this->_costumerID[] = $value;
    25. } else {
    26. $this->_costumerID[$offset] = $value;
    27. }
    28. }
    29. public function offsetUnset($offset) {
    30. unset($this->_costumerID[$offset]);
    31. }
    32. }
    33. $customer = new Customer;
    34. $customer['123'] = array('John', 'Doe', '004986753513');
    35. $customer['124'] = array('James', 'Doe', '004986753516');
    36. var_dump(
    37. $customer->searchCostumer('Doe'),
    38. $customer->searchCostumer('004986753513')
    39. );
    40. ?>
    Alles anzeigen
    MfG dynambee