PHP/DB Array aus API auslesen

McAtze

Administrator
Lizenzinhaber
Registriert
30. Apr. 2011
Beiträge
6.074
Punkte
523
XF Version
  1. 2.2.15
XF Instanz
Hosting
PHP-Version
8.2
MySQL/MariaDB
10.11
Provider/Hoster
Netcup
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:
"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?
 
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>';
          }
        ?>
 
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.
 
Danke @Hoffi ich habe echt wieder zu kompliziert gedacht.. :oops:
 
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
 
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:
 
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;
 
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.
 
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
 
Danke für den Hinweis. Ich glaube mit dem Ansatz komme ich weiter.
 
Zurück
Oben