Проблема в поиске из ассоциативного массива на основе определенного поля - PullRequest
0 голосов
/ 23 ноября 2018

Я написал ниже строки кода для захвата количества мест в конкретной комнате общежития

 $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 "," Available ": 0," BayId ": {" $ oid ":"5be1d5fbbb2c561bb4007837"}}, {"RoomId": "103d89d3-bcdd-351f-6c3c-3b81575b78d2", "FloorNumber": "2", "RoomNumber": "01", "RoomPrefix": "RoomTy" ", B201", ": {"$ oid": "5b44ca2ebb2c563ea4006396"}, "NumberOfBeds": "3", "Available": "3", "BayId": {"$ oid": "5be1d5fbb2c561bb4007838"}}, {"RoomId": "5677c541-a0b3-fb74-493b-820549c48997 "," FloorNumber ":" 2 "," RoomNumber ":" 201 "," RoomCreation ":" Ручной "," RoomType ": {" $ oid ":" 5b44ca27bb2c563ea4006395 "},"NumberOfBeds": "6", "Доступен": "6", "BayId": {"$ oid": "5be1d5fbbb2c561bb4007838 "}}, {" RoomId ":" 1bcf9a01-ca34-5b28-388f-cab05687ff1d "," FloorNumber ":" 1 "," RoomNumber ":" 103 "," RoomCreation ":" Вручную "," RoomType ":{"$ oid": "5b44ca27bb2c563ea4006395"}, "NumberOfBeds": "7", "Available": "7", "BayId": {"$ oid": "5be1d5fbb2c561bb4007837"}}, {"RoomId": "5e-16e7-4844-2965-98d6afe2d7b4 "," FloorNumber ":" 1 "," RoomNumber ":" 105 "," RoomCreation ":" Ручной "," 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", "Roomre":" Manual "," RoomType ": {" $ oid ":" 5b44ca2ebb2c563ea4006396 "}," NumberOfBeds ":" 7 "," Available ":" 7 "," BayId ": {" $ oid ":" 5be1d5fbbb2c561bb4007837 "}}]

1 Ответ

0 голосов
/ 23 ноября 2018

Здесь есть несколько проблем с вашим кодом.

Во-первых, вы неправильно использовали array_column.При таком способе использования вы бы возвращали массив с числовым индексом в качестве ключа и количество комнат в качестве значения.Кроме того, вы сериализовали объект в JSON в качестве параметра.В этом нет необходимости - объект уже находится в правильном состоянии для использования с array_column.

Правильный способ его использования выглядит следующим образом:

$RoomsArray = array_column($RoomsDetails, 'NumberOfBeds', 'RoomId');

Обратите внимание, что 'RoomId' указывает array_column использовать этот столбец в качестве значения ключа, а объект не сериализуется в JSON.

Во-вторых, вы используете array_search для поиска значения в массиве.Это неверноИспользуя array_search, вы ищете ключ для соответствующего значения, которое вы указали.На самом деле вам нужно вернуть значение ключа, который у вас уже есть (идентификатор комнаты), например:

$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 из своего кода.

...