我已经在下面几行代码中写到,以获取旅馆特定房间的床位数
$RoomsArray = array_column($RoomsDetails->jsonSerialize(), 'NumberOfBeds');
$FoundNumberOfBeds = array_search('f2937f76-05d0-9725-06fc-37cf061a31c6', $RoomsArray);
$json_string = json_encode($RoomsDetails->jsonSerialize(), JSON_PRETTY_PRINT);
var_dump($FoundNumberOfBeds);
它显示bool(false)
所需的输出应为2
$RoomsDetails->jsonSerialize()
包含以下数据:
[{“ RoomId”:“ f2937f76-05d0-9725-06fc-37cf061a31c6”,“ FloorNumber”:“ 1”,“ RoomNumber”:“ 101”,“ RoomPrefix”:“ A101”, “ RoomType”:{“ $ oid”:“ 5b44ca27bb2c563ea4006395”},“ NumberOfBeds”: “ 2”,“可用”:0,“ BayId”:{“ $ oid”:“ 5be1d5fbbb2c561bb4007837”} },{“ RoomId”:“ 103d89d3-bcdd-351f-6c3c-3b81575b78d2”,“ FloorNumber”: “ 2”,“ RoomNumber”:“ 01”,“ RoomPrefix”:“ B201”,“ RoomType”:{“ $ oid”: “ 5b44ca2ebb2c563ea4006396”},“ NumberOfBeds”:“ 3”,“ Available”:“ 3”, “ BayId”:{“ $ oid”:“ 5be1d5fbbb2c561bb4007838”}},{“ RoomId”: “ 5677c541-a0b3-fb74-493b-820549c48997”,“ FloorNumber”:“ 2”, “ RoomNumber”:“ 201”,“ RoomCreation”:“ Manual”,“ RoomType”:{“ $ oid”: “ 5b44ca27bb2c563ea4006395”},“ NumberOfBeds”:“ 6”,“ Available”:“ 6”, “ BayId”:{“ $ oid”:“ 5be1d5fbbb2c561bb4007838”}},{“ RoomId”: “ 1bcf9a01-ca34-5b28-388f-cab05687ff1d”,“ FloorNumber”:“ 1”, “ RoomNumber”:“ 103”,“ RoomCreation”:“ Manual”,“ RoomType”:{“ $ oid”: “ 5b44ca27bb2c563ea4006395”},“ NumberOfBeds”:“ 7”,“ Available”:“ 7”, “ BayId”:{“ $ oid”:“ 5be1d5fbbb2c561bb4007837”}},{“ RoomId”: “ 5e5d51fd-16e7-4844-2965-98d6afe2d7b4”,“ FloorNumber”:“ 1”, “ RoomNumber”:“ 105”,“ RoomCreation”:“ Manual”,“ RoomType”:{“ $ oid”: “ 5b44ca27bb2c563ea4006395”},“ NumberOfBeds”:“ 6”,“ Available”:4, “ BayId”:{“ $ oid”:“ 5be1d5fbbb2c561bb4007837”}},{“ RoomId”: “ 35cd9b4c-15a4-53fd-ba8d-6096883dd1c4”,“ FloorNumber”:“ 1”, “ RoomNumber”:“ 106”,“ RoomCreation”:“ Manual”,“ RoomType”:{“ $ oid”: “ 5b44ca27bb2c563ea4006395”},“ NumberOfBeds”:“ 5”,“ Available”:“ 5”, “ BayId”:{“ $ oid”:“ 5be1d5fbbb2c561bb4007837”}},{“ RoomId”: “ cfb4913d-ea28-e52e-94db-36f72601650e”,“ FloorNumber”:“ 1”, “ RoomNumber”:“ 104”,“ RoomCreation”:“ Manual”,“ RoomType”:{“ $ oid”: “ 5b44ca27bb2c563ea4006395”},“ NumberOfBeds”:“ 6”,“ Available”:“ 6”, “ BayId”:{“ $ oid”:“ 5be1d5fbbb2c561bb4007837”}},{“ RoomId”: “ 64d729fc-fbd5-5834-7820-be467af719f0”,“ FloorNumber”:“ 1”, “ RoomNumber”:“ 102”,“ RoomCreation”:“ Manual”,“ RoomType”:{“ $ oid”: “ 5b44ca2ebb2c563ea4006396”},“ NumberOfBeds”:“ 7”,“ Available”:“ 7”, “ BayId”:{“ $ oid”:“ 5be1d5fbbb2c561bb4007837”}}]
答案 0 :(得分:2)
这里的代码有几个问题。
首先,您没有正确使用array_column。使用它的方式,您将返回一个数组,该数组以数字索引作为键,并以房间数作为值。此外,您已将对象序列化为JSON作为参数。这不是必需的-该对象已经处于可以与array_column
一起使用的状态。
正确的使用方式如下:
$RoomsArray = array_column($RoomsDetails, 'NumberOfBeds', 'RoomId');
请注意,'RoomId'
告诉array_column
使用此列作为键值,并且该对象没有被序列化为JSON。
第二,您正在使用array_search
在数组中查找值。这是不正确的。通过使用array_search
,您正在寻找提供的相应值的密钥。实际上,您想要的是返回您已经拥有的键的值(房间ID),如下所示:
$FoundNumberOfBeds = $RoomsArray['f2937f76-05d0-9725-06fc-37cf061a31c6'];
通过删除未使用的行并修改错误,我得到了以下结果,正确返回了指定RoomId
的房间数:
$s = '[ { "RoomId": "f2937f76-05d0-9725-06fc-37cf061a31c6", "FloorNumber": "1", "RoomNumber": "101", "RoomPrefix": "A101", "RoomType": { "$oid": "5b44ca27bb2c563ea4006395" }, "NumberOfBeds": "2", "Available": 0, "BayId": { "$oid": "5be1d5fbbb2c561bb4007837" } } ]';
$RoomsDetails = json_decode($s);
$RoomsArray = array_column($RoomsDetails, 'NumberOfBeds', 'RoomId');
$FoundNumberOfBeds = $RoomsArray['f2937f76-05d0-9725-06fc-37cf061a31c6'];
var_dump($FoundNumberOfBeds);
请注意,在我的示例中,我去除了除一个房间条目之外的所有条目。当然,您将从代码中删除$s
和$RoomsDetails
。