Подтвердить что ты не робот

Получить многозначный массив php

Это мой массив в отелях php $

Array
(
    [0] => Array
        (
        [hotel_name] => Name
        [info] => info
        [rooms] => Array
            (
                [0] => Array
                    (
                        [room_name] => name
                        [beds] => 2
                        [boards] => Array
                            (
                                [board_id] => 1
                                [price] =>200.00
                            )
                    )
                )
        )
)

Как я могу получить board_id и цену? Я перепробовал несколько циклов foreach, но не смог получить результат.

foreach($hotels as $row)
{
    foreach($row as $k)
    {
        foreach($k as $l)
        {
            echo $l['board_id'];
            echo $l['price'];
        }
    }
}

Этот код не работал.

4b9b3361

Ответ 1

Это способ итерации по этому массиву:

foreach($hotels as $row) {
       foreach($row['rooms'] as $k) {
             echo $k['boards']['board_id'];
             echo $k['boards']['price'];
       }
}

Вы хотите итерации в отелях и комнатах (с числовыми индексами), потому что в этом случае они, похоже, являются "коллекциями". Другие массивы сохраняют и группируют свойства.

Ответ 2

То же самое, но с более значимыми именами переменных:

foreach($hotels as $hotel)
{
       foreach($hotel['rooms'] as $room)
       {
             echo $room['boards']['board_id'];
             echo $room['boards']['price'];
       }
}

Ответ 3

Для людей, которые искали php multidimensional array get values и на самом деле хотят решить проблему, связанную с получением значения одного столбца из двухмерного массива (как я!), Здесь гораздо более элегантный способ, чем использование foreach, который является array_column

Например, если я хочу получить только hotel_name из приведенного ниже массива и сформировать другой массив:

$hotels = [
    [
        'hotel_name' => 'Hotel A',
        'info' => 'Hotel A Info',
    ],
    [
        'hotel_name' => 'Hotel B',
        'info' => 'Hotel B Info',
    ]
];

Я могу сделать это с помощью array_column:

$hotel_name = array_column($hotels, 'hotel_name');

print_r($hotel_name); // Which will give me ['Hotel A', 'Hotel B']

Для фактического ответа на этот вопрос его также можно call_user_func_array('array_merge', $twoDimensionalArray); помощью array_column и call_user_func_array('array_merge', $twoDimensionalArray);

Давайте сделаем данные в PHP:

$hotels = [
    [
        'hotel_name' => 'Hotel A',
        'info' => 'Hotel A Info',
        'rooms' => [
            [
                'room_name' => 'Luxury Room',
                'bed' => 2,
                'boards' => [
                    'board_id' => 1,
                    'price' => 200
                ]
            ],
            [
                'room_name' => 'Non Luxy Room',
                'bed' => 4,
                'boards' => [
                    'board_id' => 2,
                    'price' => 150
                ]
            ],
        ]
    ],
    [
        'hotel_name' => 'Hotel B',
        'info' => 'Hotel B Info',
        'rooms' => [
            [
                'room_name' => 'Luxury Room',
                'bed' => 2,
                'boards' => [
                    'board_id' => 3,
                    'price' => 900
                ]
            ],
            [
                'room_name' => 'Non Luxy Room',
                'bed' => 4,
                'boards' => [
                    'board_id' => 4,
                    'price' => 300
                ]
            ],
        ]
    ]
];

А вот и расчет:

$rooms = array_column($hotels, 'rooms');
$rooms = call_user_func_array('array_merge', $rooms);
$boards = array_column($rooms, 'boards');

foreach($boards as $board){
    $board_id = $board['board_id'];
    $price = $board['price'];
    echo "Board ID is: ".$board_id." and price is: ".$price . "<br/>";
}

Что даст вам следующий результат:

Board ID is: 1 and price is: 200
Board ID is: 2 and price is: 150
Board ID is: 3 and price is: 900
Board ID is: 4 and price is: 300