3 回答
TA贡献2036条经验 获得超8个赞
您可以使用 array_walk
$i = 1;
array_walk($arr, function(&$v,$k) use (&$i){
array_key_exists('transaction_user_id', $v) ? ($v['transaction_user_id'] = $i AND $i++) : '';
});
结果:-
Array
(
[0] => Array
(
[transaction_user_id] => 1
[transaction_no] => 19500912050218
[transaction_status] => cancelled
)
[1] => Array
(
[transaction_no] => 36010512050819
[transaction_status] => cancelled
)
[2] => Array
(
[transaction_user_id] => 2
[transaction_no] => 19020512050820
[transaction_status] => cancelled
)
[3] => Array
(
[transaction_user_id] => 3
[transaction_no] => 27050512050821
[transaction_total_amount] => 79
[transaction_date] => 1336476927
[transaction_status] => cancelled
)
)
TA贡献1856条经验 获得超17个赞
有两种方法。
这是您必须在原始数组中指定键路径以更改值的方法,因为默认情况下它不会通过引用传递子数组。
$increment_id = 1;
foreach($arr as $key=>$transaction) {
if(isset($transaction['transaction_user_id'])) {
$arr[$key]['transaction_user_id'] = $increment_id++;
}
}
在这一节中,我将子数组作为参考传递,因此您可以直接访问要更改的值并将其应用于原始数组。
$increment_id = 1;
foreach($arr as &$transaction) {
if(isset($transaction['transaction_user_id'])) {
$transaction['transaction_user_id'] = $increment_id++;
}
}
TA贡献1895条经验 获得超3个赞
如果重复的用户ID需要对应于相同的增量号,例如,如果数组2和3应该都被分配为2,因为它们具有相同的transaction_user_id,则必须随时跟踪该关系。
迭代数据,更新一个数组,该数组在您进行操作时将transaction_user_id映射到新的增量ID。如果找到一个新的,则在数组中为其分配一个递增的值。然后用正确的增量值替换数据中的值。
$key = 'transaction_user_id';
$user_ids = [];
$next_id = 1;
foreach ($your_data as $index => $transaction) {
if (isset($transaction[$key])) {
if (!isset($user_ids[$transaction[$key]])) {
$user_ids[$transaction[$key]] = $next_id++;
}
$your_data[$index][$key] = $user_ids[$transaction[$key]];
}
}
(似乎不是这样,因为您已经接受了一个不这样做的答案,但是我已经写了它,所以无论如何它都会贴出来,以防对其他发现它的人有用。)
- 3 回答
- 0 关注
- 126 浏览
添加回答
举报