搜索多维数组并更改一个键的值
Search into multidimensional array and change value of one key
我有一个 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"
}
],
}
使用上面的请求我将数据更改到数据库中。然后 return 来自数据库的数据。但我必须将 client_local_id
传递给响应。
所以假设我从数据库中得到了 3 个结果,那么我必须 return client_local_id(这个字段没有存储在数据库中,没有必要)和他们一起。所以我通过默认 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
},
]
然后使用下面的代码我更改 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
s 映射到 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']);
我没有测试代码,但希望思路清晰。
我有一个 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"
}
],
}
使用上面的请求我将数据更改到数据库中。然后 return 来自数据库的数据。但我必须将 client_local_id
传递给响应。
所以假设我从数据库中得到了 3 个结果,那么我必须 return client_local_id(这个字段没有存储在数据库中,没有必要)和他们一起。所以我通过默认 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
},
]
然后使用下面的代码我更改 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
s 映射到 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']);
我没有测试代码,但希望思路清晰。