【问题标题】:php multidimensional array get valuesphp多维数组获取值
【发布时间】:2012-04-26 12:45:00
【问题描述】:

这是我在 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'];
        }
    }
}

此代码无效。

【问题讨论】:

    标签: php arrays multidimensional-array foreach


    【解决方案1】:

    对于搜索 php multidimensional array get values 并真正想要解决问题的人来自从 2 维数组中获取一列值(比如我!),这是一种比使用 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】:

      这是迭代这个数组的方法:

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

      您想要迭代酒店和房间(带有数字索引的房间),因为在这种情况下,它们似乎是“集合”。其他数组只保存和分组属性。

      【讨论】:

      • 这是迭代的情况。但是,如果您能说出仅获取 $k['boards'] 数组的捷径,那就太好了。或者我会说,我需要得到 board_id = 1 的板。
      • @Jithin 如果您需要带有board_id = 1 的那个,可以这样做,只需浏览PHP 手册,Array Functions section,如果您需要比@987654324 更好的东西,您会在那里找到方便的工具@.
      猜你喜欢
      • 2016-02-09
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      相关资源
      最近更新 更多