PHP/DB Array aus API auslesen

Dieses Thema im Forum "Technik und Co." wurde erstellt von McAtze, 27. Apr. 2021.

  1. McAtze

    McAtze Innendienst Lizenzinhaber

    Hallo zusammen,

    ich habe mir ein kleines Script gebastelt und versuche nun ein Array auszulesen und korrekt darzustellen. Leider klappt das nicht so wie ich das gerne hätte und hoffe das mir einer einen Tipp geben könnte.

    Derzeit bekomme ich mit der Abfrage..
    PHP:
    print_r ($vac->getPhases());
    Code (Text):
    "phases": [
        {
            "phase": "Phase 3",
            "candidates": "10"
        },
        {
            "phase": "Phase 2/3",
            "candidates": "3"
        },
        {
            "phase": "Phase 2",
            "candidates": "2"
        },
        {
            "phase": "Phase 1/2",
            "candidates": "9"
        },
        {
            "phase": "Phase 1",
            "candidates": "13"
        },
        {
            "phase": "Pre-clinical",
            "candidates": "14"
        }
    ],
    Ich hätte nun gerne aus jedem Array immer nur das zweite Value. Probiert habe ich es bisher mit..
    PHP:
    foreach ($vac->getPhases() as $phases) {
                foreach ($phases as $key => $value) {
                  echo '<div class="card bg-warning">';
                    echo '<div class="card-body">';
                      if ($key === 'phase') {
                        echo '<p class="card-text">'. $value .'</p>';
                      }
                      elseif ($key === 'candidates') {
                        echo '<p class="card-text text-uppercase">'. $value .'</p>';
                      }
                    echo '</div>';
                  echo '</div>';
                }
              }
    Es wird mir aber nicht korrekt ausgegeben. habe ich hier irgendwo einen Denkfehler drin?
     
  2. McAtze

    McAtze Innendienst Lizenzinhaber

    Aber voll den Denkfehler drin, jetzt beim erklären erst aufgefallen. :eek:

    Das wäre korrekt.
    PHP:
    <?php
              foreach ($vac->getPhases() as $phases) {
                echo '<div class="card bg-warning">';
                  echo '<div class="card-body">';
                    foreach ($phases as $key => $value) {
                      if ($key === 'phase') {
                        echo '<p class="card-text">'. $value .'</p>';
                      }
                      elseif ($key === 'candidates') {
                        echo '<p class="card-text text-uppercase">'. $value .'</p>';
                      }
                    }
                  echo '</div>';
                echo '</div>';
              }
            ?>
     
    otto gefällt das.
  3. Hoffi

    Hoffi !important Lizenzinhaber

    Warum nicht?
    PHP:

              foreach ($vac->getPhases() as $phases) {
                echo '<div class="card bg-warning">';
                 echo '<div class="card-body">';
                  echo '<p class="card-text">'. $phases['phase'] .'</p>';
                  echo '<p class="card-text text-uppercase">'. $phases['candidates'] .'</p>';
                 echo '</div>';
                echo '</div>';
              }
     
    Wenn du invalide Daten bekommen kannst, kannst du noch mit array_key_exists arbeiten. Aber die innere foreach ist unnötig.
     
    otto gefällt das.
  4. McAtze

    McAtze Innendienst Lizenzinhaber

    Danke @Hoffi ich habe echt wieder zu kompliziert gedacht.. :oops:
     
  5. otto

    otto Bekanntes Mitglied Lizenzinhaber

    Das alte Problem... auch bei mir immer wieder. Ätzend, leider...
     
  6. McAtze

    McAtze Innendienst Lizenzinhaber

    Ich hätte da nochmals einen Flaschenhals und komme nicht weiter..

    Ich habe das folgende Array. Welches nach Regionen aufgeteilt ist nach ISO Zeichen. Hier würde ich gerne aussortieren und das ISO Zeichen abfragen. Nur das Array dahinter soll ausgegeben werden.
    Wie frage ich denn dieses value ab?

    Bildschirmfoto 2021-04-27 um 20.49.17.png

    Soweit bin ich bisher gekommen..
    PHP:
        /**
         *     Get the Movie's providers
         *
         *     @return Providers[]
         */

        public function getProviders() {
            $providers = array();
         
            foreach ($this->_data['watch/providers']['results'] as $data) {
                $providers[] = new Providers($data);
            }
         
            return $providers;
        }
    Die Abfrage dann wie folgt..
    PHP:
    $providers = $movie->getProviders();
    foreach ($providers as $key => $provider) {
        print_r($provider);
    }
    Und das kommt dann raus. Aber wie komme ich an das ISO Zeichen?

    Bildschirmfoto 2021-04-27 um 20.54.12.png
     
  7. McAtze

    McAtze Innendienst Lizenzinhaber

    Ich hätte da eine andere Frage an die PHP Spezies hier in der Runde. Die mein obiges Problem lösen könnte.

    Ich suche ja den ISO-Ländercode, diesen habe ich aber schon als String in der Config. Nun versuche ich diesen String irgendwie korrekt an die folgende Abfrage zu bekommen.
    PHP:

    $lang = substr($this->getLang(), -2); // ergibt US
    $source = $this->_data['watch/providers']['results'];
    $source .= $lang;
    //Benötige $this->_data['watch/providers']['results']['US'];
     
    Kann mir jemand einen Tipp geben wie ich den String in korrekter Form an die Abfrage bekomme? :oops:
     
  8. Teralios

    Teralios Bekanntes Mitglied Lizenzinhaber

    Echt jetzt? ;)

    Was brauchst du denn genau? Brauchst du das US als KEY im Array, oder als Wert?
    PHP:
    $this->_data['watch/providers']['results']['langCode'] = $lang;

    // oder
    $this->_data['watch/providers']['results'][$lang] = $lang;
     
  9. McAtze

    McAtze Innendienst Lizenzinhaber

    Also so sieht die komplette Funktion aus..
    PHP:
        /**
         *     Get the Movie's providers
         *
         *     @return Providers[]
         */

        public function getProviders() {
            $providers = array();

            $lang = substr($this->getLang(), -2);  // ergibt US
            $source = $this->_data['watch/providers']['results'];
            $source .= $lang;
            //Benötige $this->_data['watch/providers']['results']['US'];
         
            if(is_array($source)){
                foreach ($source as $data) {
                    $providers[] = new Providers($data);
                }
            }
             
            return $providers;
        }
    $this->_data['watch/providers']['results']['US'] ist der Array den ich auslesen will. Ich würde aber gerne das US nicht als fixen Wert, sondern als Variable einbinden da dieser Wert immer abhängig von der gewählten Sprache sein soll.
     
  10. Hoffi

    Hoffi !important Lizenzinhaber

    PHP:
    $allKeys = array_keys($this->_data['watch/providers']['results'])); // liefert ein Array mit allen Keys zurück.

    $firstKey = array_shift($allKeys); // liefert den ersten Eintrag und kürzt allKeys um diesen.
    Order direkt: array_key_first($this->_data['watch/providers']['results']);

    PHP liefert einen Haufen Array Funktionen: PHP: array_key_first - Manual
     
  11. McAtze

    McAtze Innendienst Lizenzinhaber

    Danke für den Hinweis. Ich glaube mit dem Ansatz komme ich weiter.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden