我仍在为如何正确转换对我的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
遇到问题,并且在正确翻译方面也存在一些逻辑问题,是否有人知道以下代码中的主要问题是什么?
我认为有一种更简单的方法
1)创建一个函数以将德语=> Eng翻转为Eng =>德语
function array_flip_recursive($array) {
$out = [];
foreach ($array as $k => $v) {
if (is_array($v)) {
$out[$k] = array_flip_recursive($v);
} else {
$out[$v] = $k;
}
}
return $out;
}
2)将键替换为翻译后的版本
function translate($data, $dictionary, $flip = false) {
if ($flip) $dictionary = array_flip_recursive($dictionary);
$out = [];
foreach ($data as $k => $v) {
if (is_array($v)) {
$out[$k] = translate($v, $dictionary[$k], $flip);
} else {
$out[$dictionary[$k]] = $v;
}
}
return $out;
}
此函数将获取您的数据库输出或api输出以及$exchangeArray
您先前的代码中的。该$flip
变量是为了防止您将德语转换回英语。
请注意,您将需要将json_decode($api_output, true)
API输出转换为关联数组。您给出的示例是一个数据数组,因此您需要对其进行循环:
3)处理您的数据
//From the API
foreach(json_decode($api_output, true) as $api_data) {
$myData[] = translate($api_data, $exchangeArray);
}
print_r($myData);
//From your database
foreach($database_output as $database_data) {
$myData[] = translate($database_data, $exchangeArray, true);
}
print_r($myData);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句