PHP - Доступ к значениям многомерных массивов

После нескольких часов беспорядка, потливости и вытягивания волос я все еще не могу получить доступ к этим ценностям. Я хочу пропустить первый уровень массивов, и это достаточно просто с базовым циклом foreach, но я не могу добраться до массива '[' пригодности ']' во втором вспомогательном массиве. Я огляделся, но, похоже, не мог получить ничего, кроме действительно простых обучающих материалов, которые, похоже, не вникают в цикл.

Я пытаюсь получить доступ к значениям в вложенном / подмножестве, т.е. '[' Species_name ']'.

Я не хочу использовать ассоциативные ключи, поскольку сортировка - это немного проблема.

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
                        )
                )
       )
)

php,arrays,multidimensional-array,

16

Ответов: 3


16

Вещь, которая, вероятно, отключает вас, заключается в том, что пригодность представляет собой массив массивов, а не только массив, поэтому в примере, где вы хотите получить свойство species_name первого второго элемента верхнего уровня, вы будете использовать что-то вроде

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

Стоит отметить, что ваш первый массив не содержит значения «пригодности», поэтому доступ к ним невозможен. В цикле foreach вы можете использовать конструкцию, подобную этой:

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

1

Вы можете взглянуть на PHP: класс RecursiveArrayIterator

Это позволяет вам перебирать многократные вложенные ArrayIterator. Если вы не используете ArrayIterator, вам следует попробовать попробовать их.


1

Ответ Iracicot помог мне найти способ доступа к значениям рекурсивного массива, используя класс RecursiveIterator, как показано ниже. Мое решение закончилось тем, что использовало еще более полезный класс RecursiveIteratorIterator по http://php.net/manual/en/class.recursiveiteratoriterator.php . Пожалуйста, примите в виду очень полезный факт, что конечный продукт представляет собой сплющенный массив, с которым мне лично легче работать.

<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>
PHP, массивы, многомерный-массив,
Похожие вопросы