Ankündigung

Einklappen
Keine Ankündigung bisher.

Array mit mehreren Werten aus DB füllen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Array mit mehreren Werten aus DB füllen

    Hallo Gemeinde,

    ich möchte gerne ein Array in der Form
    PHP-Code:
    $items = array(
       
    "Wert 1" => "Wert A",
       
    "Wert 2" => "Wert B",
       
    "Wert 3" => "Wert C",
       
    "Wert 4" => "Wert D",
       
    "Wert 5" => "Wert E",
       
    "Wert 6" => "Wert F"
    ); 
    nun mit Daten aus meiner Datenbank füllen. Mein Ansatz:
    PHP-Code:
    mysql_select_db($database_connect$connect);
    $query_schulen "SELECT name, strasse FROM Schulen";
    $schulen mysql_query($query_schulen$connect) or die(mysql_error());
    $row_schulen mysql_fetch_array($schulen);
    $totalRows_schulen mysql_num_rows($schulen);

    $items = array();
    while (
    $row_schulen mysql_fetch_array($schulen)) {
            
    $items[] = $row_schulen['name'];
             } 
    Über print_r($items); erhalte ich eine Ausgabe in der Form:

    Array ( [0] => Grundschule "Karl Krull" [1] => Grundschule "Greif" [2] => Grundschule "Erich Weinert" [3] => Grundschule [4] => Gymnasium"Johann-Gottfried-Herder" [5] => Humboldt-Gymnasium

    etc...

    Sicher erkennt man hier mein Problem bereits: Ich weiss jetzt einfach nicht, wie ich zu $items[] = $row_schulen['name']; nun auch noch $row_schulen['strasse'] hinzufügen kann.
    Schlussendlich sollen dann bei der Ausgabe die Nummern [0], [1], [2] usw. NICHT mit ausgegeben werden, sondern lediglich:

    Grundschule "Karl Krull", strasse1
    Grundschule "Greif", strasse 2
    Grundschule "Erich Weinert", strasse 3

    usw...

    Kann mir jemand einen kleinen Denkanstoss geben? Handelt es sich hierbei vielleicht um verschachtelte Arrays?


  • #2
    Habe das mehrdimensionale Array jetzt erstellen können:
    PHP-Code:
    while ($row_schulen mysql_fetch_assoc($schulen)) {
    $items[] = array($row_schulen['name'],$row_schulen['strasse']);

    Bleibt nur noch die Frage, wie ich die Ergebnisse ansprechen und "ordentlich" formatiert ausgeben kann....

    Ich überlege in die Richtung (bitte nicht die total falsche Syntax beachten!! Ist nur ne Überlegung , aber ich bekomme die richtige Form noch nicht hin):
    PHP-Code:
    foreach ($items as ..... => .....) {
           
                    echo 
    "Schule|Strasse\n";
            } 

    Kommentar


    • #3
      PHP-Code:
      foreach ($items as $item) {
        echo 
      $item[0] . ' ' $item[1];

      So?
      http://hallophp.de

      Kommentar


      • #4
        PHP-Code:
        $items = array(
            array(
                
        'name' => 'Name 1'
                
        'strasse' => 'Straße 1'), 
            array(
                
        'name' => 'Name 2'
                
        'strasse' => 'Straße 2'), 
            array(
                
        'name' => 'Name 3'
                
        'strasse' => 'Straße 3')
        )

        foreach (
        $items as $key => $value) {
            echo 
        $value['name'] , ', ' $value['strasse'];

        $value ist auch wieder ein array und kann als solches behandelt werden.

        Kommentar


        • #5
          Danke für den Hinweis. Es muss (bei mir zumindest) heissen:
          PHP-Code:
          foreach ($items as $key => $value) {
              echo 
          $value[0].', '.$value[1].', '.$value[2].'<br />';

          Das ergibt dann, wie gewünscht:

          Grundschule "Karl Krull", Bleichstr. 36, Greifswald
          Grundschule "Greif", Max-Planck-Str. 9, Greifswald
          Grundschule "Erich Weinert", Makarenkostr. 53, Greifswald
          Grundschule, Warschauer Str. 16, Greifswald
          Gymnasium"Johann-Gottfried-Herder", Max-Planck-Str. 8, Greifswald
          Humboldt-Gymnasium, Makarenkostraße 54, Greifswald

          usw.

          Ich habe jetzt allerdings ein Folgeproblem:
          Beim Auslesen möchte ich nun eine Selektion vornehmen:
          PHP-Code:
          foreach ($items as $key => $value) {
               if (
          strpos(strtolower($key), $q) !== false) {
              echo 
          $value[0].', '.$value[1].', '.$value[2].'<br />';
              }

          wobei $q für eine Usereingabe steht, nach der die Ergebnisse gefiltert werden sollen ( kommt als $_GET['q'] aus der URL).
          Nun ist es aber so, dass $key immer nur eine Zahl ist, nämlich die fortlaufende Nummer des jeweiligen "Ober" - Arrays. Ich möchte aber nun nach vorhandenen Buchstaben im mehrdimensionalen "Unter" - Array ($value) suchen lassen, jedoch wenn ich
          PHP-Code:
          if (strpos(strtolower($key), $q) !== false) { 
          abändere in
          PHP-Code:
          if (strpos(strtolower($value[0]), $q) !== false) { 
          erhalte ich gefilterte Ergebnisse, aber leider nur aus dem $value[0].
          Ich möchte aber in allen 3! $value suchen lassen, also so ungefähr:
          PHP-Code:
          if (strpos(strtolower($value[0],$value[1],$value[2]), $q) !== false) { 
          erhalte dann aber folgende Fehlermeldung:
          Warning: Wrong parameter count for strtolower() in /homepages/0/d264879639/htdocs/......../search.php on line 393
          welche genau auf diese Stelle im Code hinweist:
          PHP-Code:
          if (strpos(strtolower($value[0],$value[1],$value[2]), $q) !== false) { 
          Was stimmt denn dort nicht?

          Kannn ich die (strtolower($value[0],$value[1],$value[2]), $q) nicht in der Form hintereinander hängen??

          Kommentar


          • #6
            Zum einen aktzeptiert strtolower nur einen parameter, du müsstest also die 3 Strings vorher schon zusammensetzen, zum anderen kann auch strpos nichts mit mehreren haystacks anfangen.

            PHP-Code:
            $combined $value[0].', '.$value[1].', '.$value[2];
            if (
            strpos(strtolower($combined), $q) !== false) {
            // alternativ direkt, was ich aber unübersichtlicher finde
            if (strpos(strtolower($value[0].', '.$value[1].', '.$value[2]), $q) !== false) { 
            Ich vermute zumindest mal, dass es für Deinen Anwendungszweck reichen würde im fertig zusammengesetzten string zu suchen. Alternativ müsstest Du die einzelnen elemente einzeln überprüfen.

            Kommentar


            • #7
              SUUUPER! Genau das war's: $combined

              Ich danke vielmals!

              Kommentar


              • #8
                Moment, du holst erst alle Daten aus der DB und filterst dann mit PHP? Gibt es einen Grund, das filtern nicht mittels WHERE in der Abfrage zu bewerkstelligen?
                @fschmengler - @fschmengler - @schmengler
                PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                Kommentar


                • #9
                  Jepp, gibt es: Stichwort "Autocomplete"

                  Kommentar

                  Lädt...
                  X