Бэкэнд PHP для приложения — хитрая вещь, которую я не могу понять

У меня каверзный вопрос, который заставил меня чуть ли не вырвать волосы за день или два.

Это код, над которым я работаю, и мне нужна помощь:

<?php

function parseOccationData($occationsObject, $attributeName) {
return $occationsObject->$attributeName;
}

function parseAttribute($attributeData, $attributeId) {
foreach ($attributeData as $attr) {
if ($attr->AttributeId == $attributeId) {
return $attr;
}
}
}

function parseImageData($data) {
$image = new stdClass();

$image->Url = $data->Url;
$image->Width = $data->Width;
$image->Height = $data->Height;

return $image;
}

function makeCleanJSON($products) {
$newProducts = array();

foreach ($products as $oldProduct) {
$newProduct = new stdClass();

$newProduct->Id = $oldProduct->Id;
$newProduct->Name = $oldProduct->Name;

// Image
$newProduct->Image = parseImageData($oldProduct->Image);

// Movie Url
$newProduct->MovieUrl = $oldProduct->UrlName;

// Phone number
$newProduct->Phone = parseAttribute($oldProduct->Attributes->AttributeData, 145)->Value->Data;
$newProduct->Phone = str_replace("(0)", "0", $newProduct->Phone);

// Price
$newProduct->Price = parseAttribute($oldProduct->Attributes->AttributeData, 106)->Value->Data;

// Long Text
$newProduct->LongText = parseAttribute($oldProduct->Attributes->AttributeData, 101)->Value->Data;

// Short Text
$newProduct->ShortText = parseAttribute($oldProduct->Attributes->AttributeData, 102)->Value->Data;

// Start Date
$newProduct->StartDate = $oldProduct->Occasions->OccasionObject->StartDate;

// End Date
$newProduct->EndDate = $oldProduct->Occasions->OccasionObject->EndDate;

// Start Time
$newProduct->StartTime = $oldProduct->Occasions->OccasionObject->StartTime;

// Valid Days
$newProduct->ValidDays = $oldProduct->Occasions->OccasionObject->ValidDays;

// Arena Id
$newProduct->ArenaId = $oldProduct->Occasions->OccasionObject->ArenaId;

// Arena Name
$newProduct->ArenaName = $oldProduct->Occasions->OccasionObject->ArenaName;

$newProducts[] = $newProduct;
}

return $newProducts;
}
?>

Фон: из вызова API я получаю длинный и утомительный массив php. У меня есть функция, которая сокращает этот массив до минимума и после этого сохраняет его как json и помещает его в файл на сервере.

Помимо прочего, в нем хранится объект «Случаи». Мой код (я делаю приложение, используя эти данные) работает нормально, если только один случай.

Однако иногда «случаи» состоят из массива, содержащего множество объектов.
При этом несколько полей в приложении будут пустыми.

Я хочу быть в состоянии сделать проверку = если «случаи» содержит более одного случая = обойти все их и извлечь из меня нужные мне данные.

Это образец исходных данных, когда он содержит только один случай:

"Occasions":{
"OccasionObject":{
"Id":19926396,
"AttributeId":111,
"ProductId":603298,
"OrganizationId":1045,
"StartDate":"2014-12-10T00:00:00",
"EndDate":"2014-12-11T00:00:00",
"StartTime":"0001-01-01T19:00:00",
"EndTime":"0001-01-01T19:00:00",
"ValidDays":"Wednesday Thursday",
"ArenaId":55,
"ArenaName":"Rum",
"EntryTime":"0001-01-01T00:00:00"}
},

И это пример, когда он содержит много:

"Occasions":{
"OccasionObject":[
{
"Id":19553154,
"AttributeId":111,
"ProductId":685680,
"OrganizationId":1045,
"StartDate":"2014-09-21T00:00:00",
"EndDate":"2014-10-30T00:00:00",
"StartTime":"0001-01-01T12:00:00",
"EndTime":"0001-01-01T17:00:00",
"ValidDays":"Tuesday Wednesday Thursday Friday",
"ArenaId":55,
"ArenaName":"Rum",
"EntryTime":"0001-01-01T00:00:00"},
{
"Id":19553155,
"AttributeId":111,
"ProductId":685680,
"OrganizationId":1045,
"StartDate":"2014-10-31T00:00:00",
"EndDate":"2014-10-31T00:00:00",
"StartTime":"0001-01-01T12:00:00",
"EndTime":"0001-01-01T16:00:00",
"ValidDays":"Friday",
"ArenaId":555,
"ArenaName":"Rum",
"EntryTime":"0001-01-01T00:00:00"}
]

Итак, в случае, когда только один случай, это часть окончательного JSON (выглядит так, как я хочу):

{
"Id": 11,
"Name": "Moviename",
"Image": {
"Width": 214,
"Height": 317
},
"Phone": "05504-345",
"Price": "4 biljons",
"LongText": "Yes a long text",
"ShortText": "Yes, short",
"StartDate": "2014-11-12T00:00:00",
"EndDate": "2014-11-13T00:00:00",
"StartTime": "0001-01-01T19:00:00",
"ValidDays": "Wednesday Thursday",
"ArenaId": 55,
"ArenaName": "Rum"},

Однако, когда несколько раз, поля StartDate, EndDate, StartTime, ValidDays, ArenaId, ArenaName все становятся пустыми.

Поэтому мне нужно изменить кодирование так, чтобы оно принималось как один, так и несколько раз. Я не могу понять, как это сделать!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector