php multidimensional array get values

前端 未结 2 559
借酒劲吻你
借酒劲吻你 2020-12-13 07:23

This is my array in php $hotels

Array
(
    [0] => Array
        (
        [hotel_name] => Name
        [info] => info
        [roo         


        
相关标签:
2条回答
  • 2020-12-13 07:39

    This is the way to iterate on this array:

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

    You want to iterate on the hotels and the rooms (the ones with numeric indexes), because those seem to be the "collections" in this case. The other arrays only hold and group properties.

    0 讨论(0)
  • 2020-12-13 07:45

    For people who searched for php multidimensional array get values and actually want to solve problem comes from getting one column value from a 2 dimensinal array (like me!), here's a much elegant way than using foreach, which is array_column

    For example, if I only want to get hotel_name from the below array, and form to another array:

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

    I can do this using array_column:

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

    For the actual answer for this question, it can also be beautified by array_column and call_user_func_array('array_merge', $twoDimensionalArray);

    Let's make the data in 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
                    ]
                ],
            ]
        ]
    ];
    

    And here's the calculation:

    $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/>";
    }
    

    Which will give you the following result:

    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
    
    0 讨论(0)
提交回复
热议问题