rizer90: 2x foreach und Daten in 1 Array

Hallo zusammen

Habe ein bisschen Schwierigkeiten bei meinen zwei foreach Schleifen. Ich habe zwei verschiedene DB Abfragen. Ich möchte eigentlich beide Ergebnisse zusammen speichern anhand meines Beispiels wäre es so gedacht:

  
array[0]  
{  
'id' => '11',  
'title => 'der titel',  
'id2' => '22',  
'description' => '....'  
}  
array[1]  
{  
'id' => '11',  
'title => 'der titel',  
'id2' => '22',  
'description' => '....'  
}  
array[2]  
{  
'id' => '11',  
'title => 'der titel',  
'id2' => '22',  
'description' => '....'  
}  

  
  
        $dbabfrage1 = '';  
  
  
        foreach ($dbabfrage1 as $row1)  
        {  
             $result[] = array(  
                 'id' => $row1['id'],  
                 'title' => $row1['title']  
             );  
  
            $dbabfrage2 = '';  
  
            foreach($dbabfrage2 as $row2)  
            {  
                $result[] = array(  
                    'id2' => $row2['id'],  
                    'description' => $row2['description']  
                );  
            }  
        }  

Jedoch wirds immer überschrieben und jetzt steh ich nun an...
Danke für die Hilfe!

  1. hi rizer90,

    Jedoch wirds immer überschrieben und jetzt steh ich nun an...

    warum?

    pack ein var_dump($result) in die jeweiligen schleifen.
    warum verschachtelst du die schleifen ineinander?

    mfg

    tami

    1. hi tami

      warum?

      pack ein var_dump($result) in die jeweiligen schleifen.

      im var_dump bei beiden ist der richtige Wert drin. Jedoch möchte ich dann im $result auch alles schön untereinander haben.

      warum verschachtelst du die schleifen ineinander?

      weil die ID von der dbabfrage1 in der dbabfrage2 gebraucht wird..

      1. hi rizer90,

        hi tami

        warum?

        pack ein var_dump($result) in die jeweiligen schleifen.

        im var_dump bei beiden ist der richtige Wert drin. Jedoch möchte ich dann im $result auch alles schön untereinander haben.

        das verstehe ich nicht, was du meinst.

        nullst du $result irgendwo?

        $result[] = array();

        ergänzt das array eigentlich immer um einen weiteren eintrag ...;

        mfg

        tami

        1. hi tami

          nullst du $result irgendwo?

          $result[] = array();

          ergänzt das array eigentlich immer um einen weiteren eintrag ...;

          Der erste result von der dbabfrage1 wird eingetragen - jedoch die dbabfrage2 werden nicht hinzugefügt. Das ist mein Problem :)

          Hoffe konnte es einigermassen erklären.

        2. hi tami

          das verstehe ich nicht, was du meinst.

          nullst du $result irgendwo?

          $result[] = array();

          ergänzt das array eigentlich immer um einen weiteren eintrag ...;

          Jetzt hab ich den Eintrag von dbabfrage2 gefunden jedoch aber nicht mit dem eintrag von dbeintrag1...
          er fügt einen neuen eintrag ins array... jedoch habe ich es eigentlich so gedacht:

            
          array[0]  
          {  
          'id' => '11',  
          'title => 'der titel',  
          'id2' => '22',  
          'description' => '....'  
          }  
          array[1]  
          {  
          'id' => '11',  
          'title => 'der titel',  
          'id2' => '22',  
          'description' => '....'  
          }  
          array[2]  
          {  
          'id' => '11',  
          'title => 'der titel',  
          'id2' => '22',  
          'description' => '....'  
          }  
          
          

          und nicht so:

            
          array[0]  
          {  
          'id' => '11',  
          'title => 'der titel',  
            
          }  
          array[1]  
          {  
          'id2' => '22',  
          'description' => '....'  
          }  
          
          
          1. Hallo

            array[0]
            {
            'id' => '11',
            'title' => 'der titel',
            'id2' => '22',
            'description' => '....'
            }

            
            >   
            > und nicht so:  
            >   
            > ~~~php
              
            
            > array[0]  
            > {  
            > 'id' => '11',  
            > 'title' => 'der titel',  
            >   
            > }  
            > array[1]  
            > {  
            > 'id2' => '22',  
            > 'description' => '....'  
            > }  
            > 
            
            

            Lösung 1: Du führst in der äußeren Schleife einen Zähler mit, den du verwendest, um den in der inneren Schleife gefundenen korrekten Eintrag anzusprechen. Das ist ungünstig, weil zwei Schleifen ineinander verschachtelt eine lange Laufzeit nach sich zieht.

            $i = 0;  
            $ausgabe = array();  
              
            foreach ($ergebnis1 as $erg1) {  
              $ausgabe[$i] = $erg1;  
              foreach ($ergebnis2 as $erg2) {  
                if ($bedingung === true) {  
                  $ausgabe[$i]['id2'] = $erg2['id2'];  
                  $ausgabe[$i]['description'] = $erg2['description'];  
                  // wir haben das Ergebnis und müssen den Rest  
                  // der Schleife nicht mehr durchlaufen  
                  break;  
                }  
              }  
              $i++;  
            }
            

            Um einiges günstiger ist es, die Datenbankabfrage so zu formulieren, dass alle benötigten Daten nach einer Abfrage aus der Datenbank fallen. Keine Nachbearbeitung, keine ineinander verschachtelten Schleifen, keine zusätzliche Laufzeit. Wie das in deinem Fall zu formulieren ist, kann dir ohne Beispieldaten und einer Beschreibung des gewünschten Ergebnisses keiner sagen.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
            Terry Pratchett, "Wachen! Wachen!"
            ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
            Veranstaltungsdatenbank Vdb 0.3
      2. Lieber rizer90,

        weil die ID von der dbabfrage1 in der dbabfrage2 gebraucht wird..

        das klingt sehr nach JOIN. Bist Du Dir absolut sicher, dass es unmöglich ist, Deine DB so zu fragen, dass sie Dir das Ergebnis schon Array-fertig liefern könnte?

        Liebe Grüße,

        Felix Riesterer.

        --
        "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
        1. Hallo Felix Riesterer

          das klingt sehr nach JOIN. Bist Du Dir absolut sicher, dass es unmöglich ist, Deine DB so zu fragen, dass sie Dir das Ergebnis schon Array-fertig liefern könnte?

          Stimmt ist nun mit JOIN gemacht und somit sieht mein Array-Output folgendermassen aus:

            
            
          array(2) {  
            [0]=>  
            array(7) {  
              ["id"]=>  
              string(36) "1"  
              ["goal"]=>  
              array(17) {  
                ["goalId"]=>  
                string(36) "2"  
                ["description"]=>  
                string(12) "Phone 1"  
                ["Team"]=>  
                array(5) {  
                  ["name"]=>  
                  string(14) "Team Rizer"  
                  ["teamId"]=>  
                  string(36) "22"  
                }  
              }  
            }  
            [1]=>  
            array(7) {  
              ["id"]=>  
              string(36) "3"  
              ["goal"]=>  
              array(17) {  
                ["goalId"]=>  
                string(36) "4"  
                ["description"]=>  
                string(19) "Phone 2"  
                ["Team"]=>  
                array(5) {  
                  ["name"]=>  
                  string(14) "Team Rizer"  
                  ["teamId"]=>  
                  string(36) "33"  
                }  
              }  
            }  
          }  
            
          
          

          Jetzt müsste ich über die foreach-Schleife irgendwie

          zu "Team Rizer" folgende zwei Ziele hinzufügen "Phone 1" + "Phone2"

  2. Lieber rizer90,

    Ich habe zwei verschiedene DB Abfragen.

    warum? Geht das nicht mit einer einzigen?

    wäre es so gedacht:

    array[0]
    {
    'id' => '11',
    'title => 'der titel',
    'id2' => '22',
    'description' => '....'
    }
    array[1]
    {
    'id' => '11',
    'title => 'der titel',
    'id2' => '22',
    'description' => '....'
    }
    array[2]
    {
    'id' => '11',
    'title => 'der titel',
    'id2' => '22',
    'description' => '....'
    }

      
    Du willst also ein zweidimensionales Array. Das könnte man auch so schreiben:  
      
    ~~~php
    $result = array(  
        array( 'id' => 11, 'title' => 'der Titel', 'id2' => 21, 'description' => '...'),  
        array( 'id' => 12, 'title' => 'der Titel', 'id2' => 22, 'description' => '...'),  
        array( 'id' => 13, 'title' => 'der Titel', 'id2' => 23, 'description' => '...')  
    );
    

    Jetzt sieht man, dass Du ein Array mit Arrays willst. Jedes "innere" Array könnte einer einzelnen DB-Abfrage entspringen... wenn man nur wüsste, was Du da abfragst...

    Liebe Grüße,

    Felix Riesterer.

    --
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
  3. hi rizer90,

    $dbabfrage2 = '';

    foreach($dbabfrage2 as $row2)

    wenn da nix drin steht, schreibst auch nix in result. dann müsste result aber dennoch "" als Eintrag einfügen ...;

    mfg

    tami

    1. hi tami,

      hi rizer90,

      $dbabfrage2 = '';

      foreach($dbabfrage2 as $row2)

      wenn da nix drin steht, schreibst auch nix in result. dann müsste result aber dennoch "" als Eintrag einfügen ...;

      E_ALL, also NOTICE und WARNING sind eingeschaltet?

      mfg

      tami