我有一个包含多个数组的json请求:
{
"user_type": "2",
"user_id": "57",
"client_detail": [
{
"server_user_id": "1",
........
........
"is_active": "1",
"client_local_id": "11"
},
{
"server_user_id": "2",
........
........
"is_active": "1",
"client_local_id": "12"
}
],
}
使用上述请求我将数据更改为数据库。然后从DB返回数据。但我必须将client_local_id
传递给回应。
所以假设我从DB得到3个结果然后我必须返回client_local_id(这个字段没有存储在DB中,没有必要)。所以我传递了默认的client_local_id 0.
EXA:
"client_detail": [
{
"server_user_id": "1",
........
........
"is_active": "1",
"client_local_id": 0
},
{
"server_user_id": "2",
........
........
"is_active": "1",
"client_local_id": 0
},
{
"server_user_id": "3",
........
........
"is_active": "1",
"client_local_id": 0
},
]
然后使用下面的代码我改变client_local_id的值。
$response = array('client_detail' => $dbvalue);
/* Change Client Local ID */
if(sizeof($client_detail_data)>0)
{
foreach($client_detail_data as $key=>$resclient_data) // loop of request
{
foreach($response['client_detail'] as $key1=>$res_client) //loop of response
{
//if id is match then change value
if($res_client['server_user_id']==$resclient_data['server_user_id'])
{
$response['client_detail'][$key1]['client_local_id'] = $resclient_data['client_local_id'];
}
}
}
}
但我认为这样做很容易。我在请求中有一个多数组,所以我不想使用太多的foreach循环。那么如何以正确的方式解决呢?
提前致谢。
答案 0 :(得分:1)
首先让我们将server_user_id
映射到client_user_id
s:
$s2c = array();
foreach($resclient_data as $item) {
$s2c[$item['server_user_id']] = $item['client_user_id'];
}
现在我们可以直接在$response
上使用array_map
:
$response['client_detail'] = array_map(function($elem) use($s2c) {
$elem['client_local_id'] = $s2c[$elem['server_local_id']];
return $elem;
}, $response['client_detail']);
我没有测试代码,但希望这个想法很明确。