Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu array_slice

Einklappen

Neue Werbung 2019

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

  • Frage zu array_slice

    Hallo Leute,

    ich habe ein bestehendes Array:
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    frage_id] => 19
                
    [fragetext] => Ich bin die 19 Frage und habe nur eine richtige AntwortWie lautet die richtige Antwort?
                [
    kategorie_id] => 1
                
    [kategoriename] => Kat_1
                
    [frageart] => Freitext
                
    [punkte] => 2
            
    )

        [
    1] => Array
            (
                [
    frage_id] => 2
                
    [fragetext] => Hallo ich bin die zweite Frage und habe auch nur eine richtige AntwortWelche ist das bitte?
                [
    kategorie_id] => 1
                
    [kategoriename] => Kat_1
                
    [frageart] => Freitext
                
    [punkte] => 1
            
    )

        [
    2] => Array
            (
                [
    frage_id] => 11
                
    [fragetext] => Ich bin die elfte Frage und habe nur eine richtige AntwortWie lautet die richtige Antwort?
                [
    kategorie_id] => 9
                
    [kategoriename] => Kat_4
                
    [frageart] => Freitext
                
    [punkte] => 5
            
    )

        [
    3] => Array
            (
                [
    frage_id] => 8
                
    [fragetext] => Ich bin die achte Frage und habe nur eine richtige AntwortWie lautet die richtige Antwort?
                [
    kategorie_id] => 7
                
    [kategoriename] => Kat_3
                
    [frageart] => Freitext
                
    [punkte] => 5
            
    )

        [
    4] => Array
            (
                [
    frage_id] => 4
                
    [fragetext] => Ich bin die vierte Frage,habe 5 Antwortmöglichkeiten und davon sind 2 richtig.
                [
    kategorie_id] => 2
                
    [kategoriename] => Kat_2
                
    [frageart] => Multiple Choice
                
    [punkte] => 2
            
    )

        [
    5] => Array
            (
                [
    frage_id] => 18
                
    [fragetext] => Ich bin die 18 Frage und habe nur eine richtige AntwortWie lautet die richtige Antwort?
                [
    kategorie_id] => 2
                
    [kategoriename] => Kat_2
                
    [frageart] => Freitext
                
    [punkte] => 2
            
    )





    Aus diesem Array möchte ich in einer Schleife einzelne Arrays herausholen und in ein neues Array einfügen.
    Dazu nutze ich array_slice.

    Ergebnis:
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    0] => Array
                    (
                        [
    frage_id] => 19
                        
    [fragetext] => Ich bin die 19 Frage und habe nur eine richtige AntwortWie lautet die richtige Antwort?
                        [
    kategorie_id] => 1
                        
    [kategoriename] => Kat_1
                        
    [frageart] => Freitext
                        
    [punkte] => 2
                    
    )

            )

        [
    1] => Array
            (
                [
    0] => Array
                    (
                        [
    frage_id] => 4
                        
    [fragetext] => Ich bin die vierte Frage,habe 5 Antwortmöglichkeiten und davon sind 2 richtig.
                        [
    kategorie_id] => 2
                        
    [kategoriename] => Kat_2
                        
    [frageart] => Multiple Choice
                        
    [punkte] => 2
                    
    )

            )


    O.a. Arrays sind aufgrund der besseren Lesbarkeit inhaltlich etwas gekürzt.

    Hier ist irgendwie immer ein Array (das zweite mit dem aufsteigenden Index) zu viel.

    Ich kann das auch mit array_merge nicht verhindern oder mache da was falsch.

    Hat da jemand einen Tip für mich?

    Gruß
    tschero
    Autodidakt und HobbyWebdesigner

    www.webdesign24.biz

  • #2
    Kannst du das bitte formatieren, das man es auch lesen kann.

    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Zitat von hausl Beitrag anzeigen
      Kannst du das bitte formatieren, das man es auch lesen kann.
      Jetzt
      Autodidakt und HobbyWebdesigner

      www.webdesign24.biz

      Kommentar


      • #4
        Aus diesem Array möchte ich in einer Schleife einzelne Arrays herausholen und in ein neues Array einfügen
        ...
        Ich kann das auch mit array_merge nicht verhindern oder mache da was falsch.
        Wie soll dir das jemand sagen wenn du den Code nicht zeigst?
        [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

        Kommentar


        • #5
          PHP-Code:
          /**
               *
               * @param type $uebergabe
               * @return type
               */
              
          private function setzeEineFrageProKategorie($uebergabe){
                  
          //Container mit Datensätzen der Fragen aus der Datenbank
                  
          $tmpFragenAusDerDatenbank $uebergabe;
                  
          //leeres Array als Container für die ausgeschnittenen Datensätze
                  
          $tmpArbeitsContainer = array();

                   
          //Allgemeine Bedingung mind. 1 Frage pro Kategorie
                  //Alle vorhandenen Kategorienamen aus der Datenbank holen
                  
          $tmpKategorieNamen SQL_REQUEST::holeAlleKategorienAusDerDatenbank($this->getDb());
                  foreach (
          $tmpKategorieNamen as $kategorien) {
                      
          $tmpPositionDerFrage 0;

                      foreach (
          $tmpFragenAusDerDatenbank as $frageDatenSatz) {
                          if (
          $kategorien['kategorie_id'] === $frageDatenSatz['kategorie_id']) {

                              
          //Datensatz der Frage aus dem Array rausholen - Hier liegt derzeit vermutlich das Problem -
                              
          $tmpArbeitsContainer[] = array_slice($tmpFragenAusDerDatenbank$tmpPositionDerFrage1);
                              break;
                          }
                          
          $tmpPositionDerFrage++;
                      }

                  }
                  return 
          $tmpArbeitsContainer;        
              } 
          Autodidakt und HobbyWebdesigner

          www.webdesign24.biz

          Kommentar


          • #6
            PHP-Code:
            SQL_REQUEST::holeAlleKategorienAusDerDatenbank 
            Du holst zuerst alle Kategorien und filterst/selektierst dann mit PHP!?

            Warum holst du nicht gleich nur die Fragen die du brauchst aus der DB, dann sparst du dir das alles.

            PHP-Code:
            if ($kategorien['kategorie_id'] === $frageDatenSatz['kategorie_id']) { 
            Das kannst du ja auch einfach in der WHERE im SQL ergänzen und dann damit abrfragen.
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Dann habe ich alle Fragen einer Kategorie in einem Array. Ich brauche nur eine Frage aus jeder Kategorie (und dann kommen noch weitere Bedingungen).
              Das Problem bliebe dann ja bestehen.
              Autodidakt und HobbyWebdesigner

              www.webdesign24.biz

              Kommentar


              • #8
                Erweitere deine Funktion.. Wenn ein Parameter vorhanden, dann nur die, wenn keiner dann alle.

                Oder halt eine eigene.. Die Kateg übergibst du einfach als Parameter und ergänzt im SQL im WHERE und fertig.

                So grob..

                Code:
                SQL_REQUEST::holeKategorie(17);
                Code:
                ... WHERE Kategorie = $parameter
                Und je nachdem was du da im Detail hast für die DB.. generell:

                - Escaping nicht vergessen (SQL-Injection und so)

                - Funktionsnamen besser immer auf englisch, dieser Mischmasch ist seltsam zu lasen

                - Warum statische Methoden? Mach ein DB Objekt und arbeite sauber damit.
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  OK, ich schaue es mir an. Bin leider nicht so fit wie ich es gerne wäre.

                  Vielen Dank schon mal für die Antworten.
                  Escaping nicht vergessen (SQL-Injection und so)
                  Ich versuche mit Prepared Statements zu arbeiten.

                  Warum statische Methoden? Mach ein DB Objekt und arbeite sauber damit.
                  .
                  Das DB-Objekt übergebe ich an die Klasse.
                  So habe ich für mich immer nur an einer Stelle die SQL-Abfragen

                  Zu eigentlichen Problem - ich habe eine Lösung gefunden, denke aber dass diese nicht sauber ist.
                  PHP-Code:
                  /**
                       *
                       * @param type $uebergabe
                       * @return type
                       */
                      
                  private function setzeEineFrageProKategorie($uebergabe){
                          
                  //Container mit Datensätzen der Fragen aus der Datenbank
                          
                  $tmpFragenAusDerDatenbank $uebergabe;
                          
                  //leeres Array als Container für die ausgeschnittenen Datensätze
                          
                  $tmpArbeitsContainer = array();

                           
                  //Allgemeine Bedingung mind. 1 Frage pro Kategorie
                          //Alle vorhandenen Kategorienamen aus der Datenbank holen
                          
                  $tmpKategorieNamen SQL_REQUEST::holeAlleKategorienAusDerDatenbank($this->getDb());
                          foreach (
                  $tmpKategorieNamen as $kategorien) {
                              
                  $tmpPositionDerFrage 0;

                              foreach (
                  $tmpFragenAusDerDatenbank as $frageDatenSatz) {
                                  if (
                  $kategorien['kategorie_id'] === $frageDatenSatz['kategorie_id']) {

                                      
                  //Datensatz der Frage aus dem Array rausholen - Hier liegt derzeit vermutlich das Problem -
                                      
                  $tmpArbeitsContainer[] = array_slice($tmpFragenAusDerDatenbank$tmpPositionDerFrage1)[0];
                                      break;
                                  }
                                  
                  $tmpPositionDerFrage++;
                              }

                          }
                          return 
                  $tmpArbeitsContainer;        
                      } 
                  PHP-Code:
                  $tmpArbeitsContainer[] = array_slice($tmpFragenAusDerDatenbank$tmpPositionDerFrage1)[0]; 
                  Autodidakt und HobbyWebdesigner

                  www.webdesign24.biz

                  Kommentar


                  • #10
                    Warum nicht einfach $tmpFragenAusDerDatenbank[$tmpPositionDerFrage]?
                    Könnte aber auch falsch sein, ich finde es gerade bisschen schwierig nachzuvollziehen was genau da passieren soll.

                    Kannst du nicht auch einfach $frageDatenSatz in das Array werfen?

                    Ansonsten... doch, passt mit [0]. array_slice gibt dir ein Array zurück und du schnappst dir das erste Element.
                    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                    Kommentar


                    • #11
                      Zitat von VPh Beitrag anzeigen
                      Warum nicht einfach $tmpFragenAusDerDatenbank[$tmpPositionDerFrage]?
                      Könnte aber auch falsch sein, ich finde es gerade bisschen schwierig nachzuvollziehen was genau da passieren soll.

                      Ansonsten... doch, passt mit [0]. array_slice gibt dir ein Array zurück und du schnappst dir das erste Element.
                      Ja zum nachvollziehen des gesamten Programms habe ich natürlich viel zu wenig Infos gepostet.

                      Kannst du nicht auch einfach $frageDatenSatz in das Array werfen?
                      Ginge auch. Jedoch steht dann der Datensatz noch in dem anderen Array drin. Das wollte ich vermeiden. Dann hätte ich das vermutlich so machen müssen.
                      PHP-Code:
                      $tmpArbeitsContainer[] = $frageDatenSatz;
                      array_slice($tmpFragenAusDerDatenbank$tmpPositionDerFrage1); 
                      Naja, trotzdem wieder etwas gelernt und die SQL-Geschichte schaue ich mir auch an.

                      Besten Dank noch mal an alle für die Hilfe.

                      Gruß
                      tschero
                      Autodidakt und HobbyWebdesigner

                      www.webdesign24.biz

                      Kommentar

                      Lädt...
                      X