Я все еще борюсь с логикой c, как правильно перевести ответ и запрос на мой PHP REST API. У меня есть следующий массив, который я получаю из REST API
[{
"id": "49557a36-028b-40c6-b2d8-8095468af130",
"startDate": "2020-04-15T06:00:00Z",
"endDate": "2020-04-15T10:00:00Z",
"bookedOn": "0001-01-01T00:00:00",
"doctorNotes": "",
"firstVisit": true,
"visitReasonID": "",
"patient": {
"firstName": "",
"lastName": "",
"birthday": "0001-01-01T00:00:00",
"gender": "x",
"street": "",
"postboxNumber": "",
"city": "",
"zip": "",
"country": "",
"email": "",
"telephone": "",
"info": ""
}]
, с другой стороны, у меня также есть некоторые данные, которые я отправляю в REST API, и он выглядит так
array(8) {
["GUID"]=>
NULL
["datumzeit_from"]=>
string(19) "2020-03-13 13:30:00"
["datumzeit_till"]=>
string(16) "2020/03/13 17:00"
["titel"]=>
string(2) "61"
["beschreibung"]=>
string(4) "okay"
["firstVisit"]=>
bool(true)
["patient"]=>
array(1) {
[0]=>
array(11) {
["vorname"]=>
string(4) "John"
["nachname"]=>
string(7) "Daniels"
["geburtsdatum"]=>
string(10) "1970-01-01"
["titel"]=>
string(4) "Herr"
["strasse"]=>
string(15) "Danielstraße 3"
["ort"]=>
string(6) "Conan"
["plz"]=>
string(5) "93085"
["land"]=>
string(2) "DE"
["email"]=>
string(1) "1"
["telnr"]=>
string(10) "0835597839"
["referenz"]=>
string(3) "nothing"
}
}
["last_updated"]=>
string(19) "2020-03-09 17:08:23"
}
для правильного перевода я создал обменный массив, который выглядит следующим образом:
<?php $exchangeArray = array(
"id" => "GUID",
"startDate" => "datumzeit_from",
"endDate" => "datumzeit_till",
"bookedOn" => "last_updated",
"doctorNotes" => "beschreibung",
"firstVisit" => "firstVisit",
//"visitReasonName" => "titel",
"visitReasonID" => "visitreason_nr",
"patient" => array(
"firstName" => "vorname",
"lastName" => "nachname",
"birthday" => "geburtsdatum",
"gender" => "titel", //anders
"street" => "strasse",
//"postboxnumber" => "",
"city" => "ort", // ort id
"zip" => "plz",
"country" => "land",
"email" => "email",
"telephone" => "telnr",
"info" => "referenz"),
); ?>
Теперь к моей главной проблеме: всегда, когда я отправляю или хочу получать данные, я всегда хочу перевести их между моей базой данных и REST. API и я в точности делаем следующее: $result = translate(json_decode($data, "IN"); //either json_decode+IN or encode+OUT
, чтобы вызвать результат, я либо помещаю некоторые данные и отправляю их, либо декодирую и получаю их. Поэтому я в основном хочу изменить ключи и сохранить значения, так что вот узкое место
function sortVars($var, $iterKey, $iterVal, $i, $IN = TRUE){ //the main logic is here and also the issue in the algorithm, it sorts out the variables
if(is_array($var)){
foreach($iterVal as $x=>$y){
if($IN == TRUE){
if(isset($var[$x])) $transformed[$i][$iterKey][$var[$x]] = $y;
} else if(isset($var[$y])) $transformed[$i][$iterKey][$var[$y]] = $x;
}
} else $transformed[$i][$var] = $iterVal;
return $transformed;
}
function transSort($data, $stat, $i=0){ //that one sorts out the whole array
global $exchangeArray;
if($stat == "IN"){
foreach($data as $kay=>$val){
if(isset($exchangeArray[$kay])){
$transformed[] = sortVars($exchangeArray[$kay], $kay, $val, $i);
}
}
} elseif($stat == "OUT"){
foreach($exchangeArray as $kay=>$val){
if(!is_array($val)){
if(isset($data[$val])) $transformed = sortVars($data[$val], $val, $kay, $i, FALSE);
} else{ //for strange reason its array with 0 in the beginning
if(isset($data[0][$val])) $transformed = sortVars($data[$val], $val, $kay, $i, FALSE);
}
}
}
$i++;
return $transformed;
}
function translate($data, $stat){ //translate response
$i=0;
if(isset($data[1])){ //if its array
foreach($data as $key){
$result = transSort($key, $stat, $i++);
}
} else $result = transSort($data, $stat);
return $result;
}
Он перебирает массивы и в зависимости от $stat
преобразует их либо в запрос, либо в ответ, но не переводит правильно и до сих пор у меня много проблем, у меня раньше была только одна функция, и $stat=IN
работал отлично, но как только я создал больше функций, чтобы было меньше кода, у него начались проблемы, а также у $stat=OUT
были некоторые проблемы с логикой c относительно правильного перевода Кто-нибудь имеет представление, что является главной проблемой в следующем коде?