使用foreach在php中获取多维数组的值

3

在这个数组函数中,我们想要获取酒店的详细信息。我使用了以下代码来获取值。在那段代码中,我没有得到正确的结果;有些酒店没有显示价格。 我也提供了输出结果。

Array
(
    [TestMode] => true
    [HotelAvailability] => Array
        (
            [0] => Array
                (
                    [Hotel] => Array
                        (
                            [Id] => 87649
                            [Name] => Asmali
                            [Region] => Array
                                (
                                    [Id] => 21303
                                    [Name] => Old City
                                )

                            [Type] => Hotel
                            [Stars] => 3
                            [Rank] => 1
                        )

                    [Result] => Array
                        (
                            [0] => Array
                                (
                                    [QuoteId] => 12297840-763
                                    [Room] => Array
                                        (
                                            [RoomType] => Array
                                                (
                                                    [Code] => 1103598
                                                    [Text] => Double Economy
                                                )

                                            [MealType] => Array
                                                (
                                                    [Code] => 1000018
                                                    [Text] => Bed and breakfast
                                                )

                                            [SellingPrice] => Array
                                                (
                                                    [Currency] => INR
                                                    [Amount] => 2094.87
                                                    [Estimated] => false
                                                    [Converted] => false
                                                )

                                            [Guests] => Array
                                                (
                                                    [Adult] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [Id] => -452103032
                                                                    [Forename] => Array
                                                                        (
                                                                        )

                                                                    [Surname] => Array
                                                                        (
                                                                        )

                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 1047.44
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                            [1] => Array
                                                                (
                                                                    [Id] => -452103033
                                                                    [Forename] => Array
                                                                        (
                                                                        )

                                                                    [Surname] => Array
                                                                        (
                                                                        )

                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 1047.43
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                        )

                                                )

                                            [Confirmation] => allocation
                                        )

                                )

                            [1] => Array
                                (
                                    [QuoteId] => 12297840-764
                                    [Room] => Array
                                        (
                                            [RoomType] => Array
                                                (
                                                    [Code] => 1002196
                                                    [Text] => Double Standard
                                                )

                                            [MealType] => Array
                                                (
                                                    [Code] => 1000018
                                                    [Text] => Bed and breakfast
                                                )

                                            [SellingPrice] => Array
                                                (
                                                    [Currency] => INR
                                                    [Amount] => 2993.22
                                                    [Estimated] => false
                                                    [Converted] => false
                                                )

                                            [Guests] => Array
                                                (
                                                    [Adult] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [Id] => -452103034
                                                                    [Forename] => Array
                                                                        (
                                                                        )

                                                                    [Surname] => Array
                                                                        (
                                                                        )

                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 1496.61
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                            [1] => Array
                                                                (
                                                                    [Id] => -452103035
                                                                    [Forename] => Array
                                                                        (
                                                                        )

                                                                    [Surname] => Array
                                                                        (
                                                                        )

                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 1496.61
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                        )

                                                )

                                            [Confirmation] => allocation
                                        )

                                )

                            [2] => Array
                                (
                                    [QuoteId] => 12297840-765
                                    [Room] => Array
                                        (
                                            [RoomType] => Array
                                                (
                                                    [Code] => 1002210
                                                    [Text] => Double Deluxe
                                                )

                                            [MealType] => Array
                                                (
                                                    [Code] => 1000018
                                                    [Text] => Bed and breakfast
                                                )

                                            [SellingPrice] => Array
                                                (
                                                    [Currency] => INR
                                                    [Amount] => 4190.37
                                                    [Estimated] => false
                                                    [Converted] => false
                                                )

                                            [Guests] => Array
                                                (
                                                    [Adult] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [Id] => -452103036
                                                                    [Forename] => Array
                                                                        (
                                                                        )

                                                                    [Surname] => Array
                                                                        (
                                                                        )

                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 2095.18
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                            [1] => Array
                                                                (
                                                                    [Id] => -452103037
                                                                    [Forename] => Array
                                                                        (
                                                                        )

                                                                    [Surname] => Array
                                                                        (
                                                                        )

                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 2095.19
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                        )

                                                )

                                            [Confirmation] => allocation
                                        )

                                )

                            [3] => Array
                                (
                                    [QuoteId] => 12297840-329
                                    [Room] => Array
                                        (
                                            [RoomType] => Array
                                                (
                                                    [Code] => 1286415
                                                    [Text] => Twin (Standard Twin)
                                                )

                                            [MealType] => Array
                                                (
                                                    [Code] => 1000030
                                                    [Text] => Full Breakfast
                                                )

                                            [SellingPrice] => Array
                                                (
                                                    [Currency] => INR
                                                    [Amount] => 5384.70
                                                    [Estimated] => false
                                                    [Converted] => false
                                                )

                                            [Guests] => Array
                                                (
                                                    [Adult] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [Id] => -113025469
                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 2692.35
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                            [1] => Array
                                                                (
                                                                    [Id] => -113025470
                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 2692.35
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                        )

                                                )

                                            [Confirmation] => allocation
                                        )

                                )

                            [4] => Array
                                (
                                    [QuoteId] => 12297840-348
                                    [Room] => Array
                                        (
                                            [RoomType] => Array
                                                (
                                                    [Code] => 1832194
                                                    [Text] => Double (Standard Twin)
                                                )

                                            [MealType] => Array
                                                (
                                                    [Code] => 1000030
                                                    [Text] => Full Breakfast
                                                )

                                            [SellingPrice] => Array
                                                (
                                                    [Currency] => INR
                                                    [Amount] => 5384.70
                                                    [Estimated] => false
                                                    [Converted] => false
                                                )

                                            [Guests] => Array
                                                (
                                                    [Adult] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [Id] => -113025507
                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 2692.35
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                            [1] => Array
                                                                (
                                                                    [Id] => -113025508
                                                                    [SellingPrice] => Array
                                                                        (
                                                                            [Currency] => INR
                                                                            [Amount] => 2692.35
                                                                            [Estimated] => false
                                                                            [Converted] => false
                                                                        )

                                                                )

                                                        )

                                                )

                                            [Confirmation] => allocation
                                        )

                                )

                        )

                )

            [1] => Array
                (
                    [Hotel] => Array
                        (
                            [Id] => 1712021
                            [Name] => May Hotel
                            [Region] => Array
                                (
                                    [Id] => 21303
                                    [Name] => Old City
                                )

                            [Type] => Hotel
                            [Stars] => 4
                            [Rank] => 1
                        )

                    [Result] => Array
                        (
                            [QuoteId] => 12297840-899
                            [Room] => Array
                                (
                                    [RoomType] => Array
                                        (
                                            [Code] => 1002196
                                            [Text] => Double Standard
                                        )

                                    [MealType] => Array
                                        (
                                            [Code] => 1000018
                                            [Text] => Bed and breakfast
                                        )

                                    [SellingPrice] => Array
                                        (
                                            [Currency] => INR
                                            [Amount] => 2217.18
                                            [Estimated] => false
                                            [Converted] => false
                                        )

                                    [Guests] => Array
                                        (
                                            [Adult] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [Id] => -452103440
                                                            [Forename] => Array
                                                                (
                                                                )

                                                            [Surname] => Array
                                                                (
                                                                )

                                                            [SellingPrice] => Array
                                                                (
                                                                    [Currency] => INR
                                                                    [Amount] => 1108.59
                                                                    [Estimated] => false
                                                                    [Converted] => false
                                                                )

                                                        )

                                                    [1] => Array
                                                        (
                                                            [Id] => -452103441
                                                            [Forename] => Array
                                                                (
                                                                )

                                                            [Surname] => Array
                                                                (
                                                                )

                                                            [SellingPrice] => Array
                                                                (
                                                                    [Currency] => INR
                                                                    [Amount] => 1108.59
                                                                    [Estimated] => false
                                                                    [Converted] => false
                                                                )

                                                        )

                                                )

                                        )

                                    [Confirmation] => allocation
                                )

                        )

                )

输出:

87649 - Asmali: Old City 3 
1712021 - May Hotel: Old City 4 INR 2217.18

我的代码:

    foreach($array_data['HotelAvailability'] as $hotel) {
        $id = $hotel['Hotel']['Id'];
        $name = $hotel['Hotel']['Name'];
        $region = $hotel['Hotel']['Region']['Name'];
        $stars = $hotel['Hotel']['Stars'];
        $price = $hotel['Result']['Room']['SellingPrice']['Currency'] . ' ' . $hotel['Result']['Room']['SellingPrice']['Amount'] ;

       echo "$id - $name: $region $stars $price<br>\n"; 
   }
3个回答

1
foreach($array_data['HotelAvailability'] as $hotel) {
    $id = $hotel['Hotel']['Id'];
    $name = $hotel['Hotel']['Name'];
    $region = $hotel['Hotel']['Region']['Name'];
    $stars = $hotel['Hotel']['Stars'];
    $price = $hotel['Result']['Room']['SellingPrice']['Currency'] . ' ' . $hotel['Result']['Room']['SellingPrice']['Amount'] ;

多价格获取。
if (is_array($hotel['Result'][0]))
    {



    foreach($hotel['Result'] as $result) 
    {


               $price1 =  $result['Room']['SellingPrice']['Currency'] . ' ' . $result['Room']['SellingPrice']['Amount'];

                echo "$price1 ";



    }

     }

希望你能接受自己的答案。也希望你能给其他人点赞 :) - Marikkani Chelladurai

1

正如您所看到的,Result 有多个子数组,如果您需要与第一个条目相关的详细信息,可以使用其索引 0

$price = $hotel['Result'][0]['Room']['SellingPrice']['Currency'] . ' ' . $hotel['Result'][0]['Room']['SellingPrice']['Amount'] ;

你可以使用任何结果数组来更改索引[0],否则您可以循环遍历 Result 子数组并检索所需的所有详细信息。
foreach($array_data['HotelAvailability'] as $hotel) 
{
    $id = $hotel['Hotel']['Id'];
    $name = $hotel['Hotel']['Name'];
    $region = $hotel['Hotel']['Region']['Name'];
    $stars = $hotel['Hotel']['Stars'];

    foreach($hotel['Result'] as $result)
    {
         echo $result['Room']['SellingPrice']['Currency'] . ' ' . $result['Room']['SellingPrice']['Amount'];
    }
}

如果我使用这段代码,会出现错误 - 致命错误:无法将字符串偏移量用作数组。多个价格的酒店被显示,但是如果只有一种房型,那么只有一个价格的酒店不会被显示,我会遇到错误。请解决这个问题。 - Abiram
你试过我的第二个解决方案吗?你需要将它放在你的第一个循环内部。 - Fabio
我只尝试了第二个选项,但是我得到了输出。在这个输出中,显示了多个价格的酒店。单价酒店没有显示,并且出现了一个错误 - 致命错误:无法将字符串偏移量用作数组。 - Abiram
我尝试了第一个,但是得到的结果和之前一样。我需要所有酒店及其所有多个价格作为输出,你能帮我吗? - Abiram
所以你需要使用循环(第二个选项),你把它放在了第一个循环里面吗?请检查更新的答案。 - Fabio
我使用了第二个选项,只将其放在循环内部。输出结果大约是15到20个默认酒店。但现在我只得到了三个结果。66814 - 全景:迪拜 2印度卢比4006.81 90974 - 迪拉全景:迪拜 2印度卢比3840.41 266542 - 赞国际:迪拜 3印度卢比4829.55致命错误:无法将字符串偏移量用作数组,在C:\xampp\htdocs\roomsxml\hotel.php的116行。因为我的观点是首先酒店有多个可用价格,所以我显示了它们。第四个酒店只有一个价格,所以出现了致命错误。其他酒店也存在错误。 - Abiram

0

由于结果数组是多维的,您缺少一个索引。

$hotel['Result'][0]['Room']['SellingPrice']['Currency'];
$hotel['Result'][0]['Room']['SellingPrice']['Amount'];

有多个价格可用。所以我只需要循环函数。但是上面的循环函数虽然能工作,但我遇到了一些错误——致命错误:无法将字符串偏移量用作数组。多个价格的酒店被显示出来,但单价的酒店没有被显示。我该怎么办? - Abiram
is_array() 表示你有诸如价格等详细信息。 !is_array() 表示是一个字符串/空的,因此没有价格。设置一个默认值或什么都不设置。 - Pian0_M4n

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