Ankündigung

Einklappen
Keine Ankündigung bisher.

mehrdimensoinale Array einzelne Variablen ausgeben

Einklappen

Neue Werbung 2019

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

  • mehrdimensoinale Array einzelne Variablen ausgeben

    Hallo

    Ich bin daran eine grössere Zeittabelle zu machen. Statt jedes Feld einzeln in die DB zu schreiben sollte ich es mit einem array machen.

    Im array habe ich die Daten, aber ich kann sie nicht einzeln rausholen

    PHP-Code:
    <?php 
    $query 
    "SELECT * FROM ... WHERE `id_t`=$id_t";
    $a=array();
    foreach (
    $mysqli->query($query) as $rowzeiten
    {
    $a[]=$rowzeiten['zeitart']=array("zeitart"=>$rowzeiten['zeitart'],"zeit"=>$rowzeiten['zeit'],"id"=>$rowzeiten['id'],"id_t"=>$rowzeiten['id_']);
    }
    var_dump($a);
    ?>
    Das var_dump ergibt folgendes Ergebnis:

    array(2) {
    [0]=> array(4) { ["zeitart"]=> string(4) "mon1" ["zeit"]=> string( 8 ) "08:30:00" ["id"]=> string(1) "1" ["id_t"]=> string(1) "1" }
    [1]=> array(4) { ["zeitart"]=> string(7) "mon1bis" ["zeit"]=> string( 8 ) "11:15:00" ["id"]=> string(1) "2" ["id_t"]=> string(1) "1" }
    }

    nun sollte ich ["zeit"] haben wenn ["zeitart"]==mon1bis ist
    PHP-Code:
    <?php if (in_array("mon1"$a['zeitart'])){var_dump($a['zeit']);}    ?>
    geht nicht: Undefined index: zeitart


  • #2
    Das stimmt ja auch...

    $a hat 2 Einträge unter den Offsets 0 und 1.
    Der Offset "zeitart" liegt im Array dahinter - der Wert hinter "zeitart" ist aber kein Array, sondern ein String!


    Diese Zeile sieht auch sehr sonderbar aus - was genau bezweckst du mit dieser seltsamen Art der doppelten Zuweisung?
    PHP-Code:
    $a[]=$rowzeiten['zeitart']=array("zeitart"=>$rowzeiten['zeitart'],"zeit"=>$rowzeiten['zeit'],"id"=>$rowzeiten['id'],"id_t"=>$rowzeiten['id_']); 
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      natürlich nicht, wenn du ein mehrdimensionales Array hast.
      $a[0] ist deine erste Zeile
      $a[1] dein zweite Zeile
      $a[0]['zeitart'] ist das Arrayfeld das du suchst wenn du die erste Zeile meinst.

      Kommentar


      • #4
        Ja, was bezwecke ich? Es sind mindestens 36 Zeitfelder, eine grosse Tabelle wo die User nach Tagen und Variablen ihre Bedürfnisse erfassen können

        <input name="tf_zeit[1][mon1]]" type="time" step="900" id="mon1">
        <input name="tf_zeit[2][mon1bis]" type="time" step="900" id="mon1bis">
        usw...

        und nun sollte ich die Anagben ja auch wieder finden. Damit meine ich, wenn in der Datenbank einen Datensatz hat mit mon1bis und dort eine Zeit muss ich diese im Value des Inputfelds <input name="tf_zeit[2][mon1bis] ausgeben.

        Mag sein dass das array nun inzwischen kompliziert ist, bin seit heute früh am pröbeln und lesen, und komme nicht weiter

        Wenn ich im foreach $resultat[]=$rowzeiten; schreibe ergibt das var_dump($resultat);

        array(2) {
        [0]=> array(4) { ["id"]=> string(1) "1" ["id_t"]=> string(1) "1" ["zeitart"]=> string(4) "mon1" ["zeit"]=> string( "08:30:00" }
        [1]=> array(4) { ["id"]=> string(1) "2" ["id_t"]=> string(1) "1" ["zeitart"]=> string(7) "mon1bis" ["zeit"]=> string( "11:15:00" }
        }

        und jetzt möchte ich


        HTML-Code:
        if (in_array("mon1", $resultat['zeitart'])) {
        print_r($resultat['zeit']);
        }
        oder

        PHP-Code:
        if($resultat['zeitart']='mon1'){echo $resultat['zeit'];} 
        doch beides geht nicht es heisst Undefined index: zeitart

        Kommentar


        • #5
          Du hast die Antwort bereits bekommen - führ die die Struktur des Arrays vor Augen!
          Code:
          array(2) {
            [0]=> array(4) {
              ["id"]=> string(1) "1"
              ["id_t"]=> string(1) "1"
              ["zeitart"]=> string(4) "mon1"
              ["zeit"]=> string(8) "08:30:00"
            }
            [1]=> array(4) {
              ["id"]=> string(1) "2"
              ["id_t"]=> string(1) "1"
              ["zeitart"]=> string(7) "mon1bis"
              ["zeit"]=> string(8) "11:15:00"
            }
          }
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Es ist richtig lstegelitz, so sieht der Array aus. Doch ich bringe es nicht hin, weder in_array oder strpos greift. Wie suche ich den Array mit mon1bis und gebe dann die Zeit (11:15) aus?

            Ich stehe auf dem Schlauch, nichts geht,

            Danke für die Hilfe

            Kommentar


            • #7
              weder in_array oder strpos greift [...]
              Ich stehe auf dem Schlauch, nichts geht,
              Na, meinetwegen... das ist weit von Fortgeschritten entfernt.

              Gegeben sei dieses Array in $result
              Code:
              array(2) {
                [0]=> array(4) {
                  ["id"]=> string(1) "1"
                  ["id_t"]=> string(1) "1"
                  ["zeitart"]=> string(4) "mon1"
                  ["zeit"]=> string(8) "08:30:00"
                }
                [1]=> array(4) {
                  ["id"]=> string(1) "2"
                  ["id_t"]=> string(1) "1"
                  ["zeitart"]=> string(7) "mon1bis"
                  ["zeit"]=> string(8) "11:15:00"
                }
              }
              Direkte Abfrage:
              PHP-Code:
              if ($result[0]['zeitart'] == 'mon1' || $result[1]['zeitart'] == 'mon1') {  
                
              // whatever

              Innerhalb einer Schleife:
              PHP-Code:
              foreach($result as $row) {  
                if(
              $row['zeitart'] == 'mon1') {
                  
              // whatever  
                
              }

              Ich verstehe immer nicht, was so schwierig an mehrdimensionalen Array sein soll, das man so etwas nicht sieht...
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8

                Danke ich glaube jetzt habe ich es gelöst. Wie ich gemerkt habe muss ich nach dem Select die Daten nicht nochmals zusätzlich in ein array schreiben, der foreach nach dem select macht schon ein array

                Danke

                PHP-Code:
                if ( isset( $id_t ) ) {
                  
                $query "SELECT zeitart,zeit FROM  t_moeg WHERE `id_t`=$id_t";
                  foreach ( 
                $mysqli->query$query ) as $rowzeiten ) {
                    
                $zeitart $rowzeiten'zeitart' ];
                    
                $_SESSION$zeitart ] = $rowzeiten'zeit' ];
                  }
                }
                //für alle 36 Varienten frage ich so den Inhalt der Session ab und schreibe diese in die Tabelle
                if ( isset( $_SESSION'die1bis' ] ) ) {
                  echo 
                $_SESSION'die1bis' ];

                Kommentar


                • #9
                  Warum machst du hier ein foreach(), wenn du nur eine Zeile erwartest?

                  Kommentar


                  • #10
                    es sind aktuell 36 Möglichkeiten von diesen werden in unterschiedlicher Ausprägung rund 10 erfasst. Deshalb nehme ich die Angaben in eine Session und kann sie dann am entsprechenden Ort ausgeben.

                    So erfasse ich die Daten

                    PHP-Code:
                    foreach ( $_POST'tf_zeit' ] as $tf_zeit 
                    {
                    if ( !empty( 
                    $_POST'zeit'] ) ) {
                        
                    $query 'INSERT INTO `t_moeg` (`id_t`, `zeitart`, `zeit`) 
                    VALUES ( 
                    "' 
                    $id_t '",
                    "' 
                    $_POST'zeitart']  . '",
                    "' 
                    $_POST'zeit']. '")';
                        
                    $mysqli->query$query );
                      }

                    Kommentar


                    • #11
                      Auch noch eine schöne Sicherheitslücke eingebaut. Werte sollten niemals direkt in SQL-Code eingefügt werden. Verwende am besten Prepared Statements.

                      Kommentar

                      Lädt...
                      X