webentwicklung-frage-antwort-db.com.de

PHP - Zugriff auf mehrdimensionale Array-Werte

Nach mehrstündigem Durcheinander, Schwitzen und Herausziehen meiner Haare kann ich immer noch nicht auf diese Werte zugreifen. Ich möchte die erste Ebene von Arrays durchlaufen, und das ist mit einer einfachen 'foreach'-Schleife einfach genug, aber ich komme anscheinend nicht zum' ['Suitability'] '- Array des zweiten Subarrays. Ich habe mich umgesehen, kann aber anscheinend nichts anderes als wirklich grundlegende Array-Tutorials bekommen, die sich nicht zu sehr in das Looping eintauchen.

Ich versuche, auf die Werte im verschachtelten/Sub-Array zuzugreifen, z. B. '[' Species_name ']'.

Ich möchte keine assoziativen Schlüssel verwenden, da die Sortierung ein Problem darstellt.

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Bradeley Hall Pool
            [postcode] => CW1 5QN
            [lat] => 53.10213
            [lon] => -2.41069
            [size] => 1.60
            [pegs] => 21
            [distance] => 26.6
        )

    [1] => Array
        (
            [id] => 2
            [name] => Farm Pool
            [postcode] => CW9 6JQ
            [lat] => 53.320502
            [lon] => -2.549049
            [size] => 0.88
            [pegs] => 8
            [distance] => 15.4
            [suitability] => Array
                (
                    [0] => Array
                        (
                            [fk_water_id] => 2
                            [fk_species_id] => 4
                            [species_name] => Barbel
                            [species_rating] => 1
                            [record_id] => 1
                            [weight_kg] => 2.721554
                            [length_cm] => 40
                            [height_cm] => 30
                        )
                )
       )
)
17
Paul Pavlou

Das, was Sie wahrscheinlich in die Irre führt, ist, dass es sich bei der Eignung um ein Array von Arrays handelt, nicht nur um ein Array. In einem Beispiel, in dem Sie die species_name -Eigenschaft des ersten zweiten Elements der obersten Ebene abrufen möchten, verwenden Sie so etwas 

$array[1]["suitability"][0]["species_name"];

Es ist erwähnenswert, dass Ihr erstes Array keinen "Eignungswert" enthält, so dass nicht darauf zugegriffen werden kann. In einer foreach-Schleife können Sie ein ähnliches Konstrukt verwenden:

foreach($array as $value){
    if (isset($value["suitability"])){
        echo $value["suitability"][0]["species_name"];
    }
}
19
Orangepill

Sie können einen Blick auf PHP werfen: RecursiveArrayIterator-Klasse

Dadurch können Sie mehrere verschachtelte ArrayIterator-Elemente durchlaufen. Wenn Sie keinen ArrayIterator verwenden, sollten Sie versuchen, sie auszuprobieren.

1
lracicot

Iracicots Antwort half mir bei der Suche nach den Werten eines rekursiven Arrays mithilfe der Klasse RecursiveIterator (siehe unten). Meine Lösung endete mit der noch nützlicheren RecursiveIteratorIterator-Klasse gemäß http://php.net/manual/en/class.recursiveiteratorator.php . Bedenken Sie bitte die sehr nützliche Tatsache, dass das Endprodukt ein abgeflachtes Array ist, mit dem ich persönlich viel einfacher arbeiten konnte. 

<table style="border:2px;">
  <tr>
    <th>Time</th>
    <th>Service Number</th>
    <th>Destination</th>
  </tr>
<?php 
foreach($stops as $buses){
       $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($buses));
       $bus = (iterator_to_array($iterator,true)); 
       print('<tr><td>'.$bus['AimedDepartureTime'].'</td><td>'.$bus['PublishedLineName'].'</td><td>'.$bus['DirectionName'].'</td></tr>');
}
?>
</table>
1

Um verschachtelte Elementwerte aus einem mehrdimensionalen Array mit Rückfall auf den Standardwert zu erhalten, können Sie Folgendes verwenden:

Arr::getNestedElement($array, $keys, $default = null)

aus diese Bibliothek so:

Arr::getNestedElement($array, [$index1, 'suitability', $index2, 'species_name'])

die gibt null (oder den angegebenen Standardwert) anstelle der Warnung zurück, wenn Sie versuchen, auf Schlüssel zuzugreifen, die nicht im Array vorhanden sind.

0
Minwork