У меня есть один запрос 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"
}
],
}
Используя вышеуказанный запрос, я изменяю данные в базу данных. затем возвращать данные из БД. но я должен передать client_local_id
в ответ.
так что предположим, что я получил 3 результата из БД, тогда мне нужно вернуть client_local_id (это поле не хранится в БД, нет необходимости в этом) с ними. поэтому я передаю default client_local_id 0.
экс:
"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
},
]
затем, используя нижеприведенный код i, измените значение 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. так как решить его должным образом?
Заранее спасибо.
Прежде всего, давайте сопоставьте server_user_id
с client_user_id
s:
$s2c = array();
foreach($resclient_data as $item) {
$s2c[$item['server_user_id']] = $item['client_user_id'];
}
Теперь мы можем использовать array_map
непосредственно на $response
:
$response['client_detail'] = array_map(function($elem) use($s2c) {
$elem['client_local_id'] = $s2c[$elem['server_local_id']];
return $elem;
}, $response['client_detail']);
Я проверяю код, но, надеюсь, идея понятна.
global
внутреннюю функцию.use
ключевое слово вместо глобального. Просьба посмотреть обновленный ответ.