PHP多维数组获取值

32

这是我在PHP中的数组$hotels

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_idprice?我尝试了几个 foreach 循环,但无法得到结果。

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

这段代码没有起作用。

2个回答

39

对于那些搜索php多维数组获取值并且真正想解决从二维数组中获取一列值的问题(就像我一样!),这里有一个比使用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']

对于这个问题的实际答案,也可以通过array_columncall_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

2
这是获取单维数组内部值的简短而好的方法。 - heySushil
这应该是被选中的答案。 - commadelimited

39

这是迭代该数组的方法:

foreach($hotels as $row) {
       foreach($row['rooms'] as $k) {
             echo $k['boards']['board_id'];
             echo $k['boards']['price'];
       }
}
你想要迭代酒店和房间(具有数字索引的那些),因为它们似乎是这种情况下的“集合”。其他数组仅保存和分组属性。

1
这是迭代的情况。但如果您能告诉我如何快速获取$k['boards']数组,那就太好了。或者我可以说,我需要获取board_id = 1的板块。 - Jithin
1
如果你需要 board_id = 1 的那一个,可以浏览 PHP 手册中的 Array Functions 部分,你会发现一些方便易用的工具,如果你需要比 foreach 更好的东西。 - kapa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接