如何在Laravel中将一个json数组与另一个json数组进行比较和填充



我正在使用Laravel 9并构建一个REST API服务用户将向我发送保存在mySQL数据库中的json数据,同时将数据格式化并发送到外部API端点,以便在整个工作流中同步数据。

构建新的REST API服务的原因是,构建的早期API对于用户来说非常复杂,特别是需要发送的请求主体。

这就是用户向我发送JSON数据的方式。让我们称之为";ShortJSON";

"restrictions": {
"crown_top_left": [
1,
3,
5
],
"crown_top_right": [
2,
5,
7
]
}

因此;crown_top_left";或其它物体将具有数字"0"的任意组合;2,4,8〃;等等

现在的问题是,我发布数据的外部API接受这种格式的数据。让我们称之为";LongJSON";

"crown_Tooths_obj": {
"crown_upper_left_1": true,
"crown_upper_left_2": false,
"crown_upper_left_3": true,
"crown_upper_left_4": false,
"crown_upper_left_5": true,
"crown_upper_left_6": false,
"crown_upper_left_7": false,
"crown_upper_left_8": false,
"crown_lower_left_1": false,
"crown_lower_left_2": false,
"crown_lower_left_3": false,
"crown_lower_left_4": false,
"crown_lower_left_5": false,
"crown_lower_left_6": false,
"crown_lower_left_7": false,
"crown_lower_left_8": false,
} 

我想要一种将ShortJSON映射到LongJSON的方法,使LongJSON值根据ShortJSON 中的数字变为true或false

例如,如果";crown_top_left";简而言之,JSON有[1,2,3]那么LongJSON的输出应该是

"crown_Tooths_obj": {
"crown_upper_left_1": true,
"crown_upper_left_2": true,
"crown_upper_left_3": true,
"crown_upper_left_4": false,
"crown_upper_left_5": false,
"crown_upper_left_6": false,
}

1,2&3存在,因此这些值将成为真正的

我尝试了array_map、array_diff和很多东西,但它们完全是另一回事。他们没有帮我做我想做的事。我浪费了一个晚上。请帮我解决

我希望我已经以最清晰的方式提出了这个问题

我不太清楚你的确切问题,但我认为如果你的问题产生了错误&来自限制数组的true:

$json = '{"restrictions": {
"crown_top_left": [
1,
3,
5
],
"crown_top_right": [
2,
5,
7
]
}}';
$array = json_decode($json , true);

foreach ($array as $key => $value) {
foreach ($value as $cron => $ids){
$newArray = [];
$cron = str_replace("top" , "upper" , $cron);
$cron = str_replace("bottom" , "lower" , $cron);
// fill the array of all posible variation
for($i = 1 ; $i < 7 ; $i++){
$newArray[$cron . "_" . $i] = false;
}
foreach($ids as $id){
$newArray[$cron . "_" . $id] = true;
}
$outPut[] = $newArray;
}
}
var_dump($outPut);

最新更新