为了账号安全,请及时绑定邮箱和手机立即绑定

如何将重复的数组键的值更改为递增的数字

如何将重复的数组键的值更改为递增的数字

PHP
HUX布斯 2021-05-07 14:16:34
我需要将“ transaction_user_id”的值更改为递增的数字。如果数组具有键[transaction_user_id],则应将其赋值为1,以此类推。例如,如果数组具有[transaction_user_id],则[transaction_user_id] = 1,移至第二个[transaction_user_id] = 2。   Array(    [0] => Array        (            [transaction_user_id] => 359691e27b23f8ef3f8e1c50315cd506            [transaction_no] => 19500912050218            [transaction_status] => cancelled        )    [1] => Array        (            [transaction_no] => 36010512050819            [transaction_status] => cancelled        )    [2] => Array        (            [transaction_user_id] => 9def02e6337b888d6dbe5617a172c18d            [transaction_no] => 19020512050820            [transaction_status] => cancelled        )    [3] => Array        (            [transaction_user_id] => 9def02e6337b888d6dbe5617a172c18d            [transaction_no] => 27050512050821            [transaction_total_amount] => 79.00            [transaction_date] => 1336476927            [transaction_status] => cancelled        ))
查看完整描述

3 回答

?
慕桂英3389331

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

    )


  )


查看完整回答
反对 回复 2021-05-21
?
慕慕森

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++;   

    }

}



查看完整回答
反对 回复 2021-05-21
?
蛊毒传说

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]];

    }

}

(似乎不是这样,因为您已经接受了一个不这样做的答案,但是我已经写了它,所以无论如何它都会贴出来,以防对其他发现它的人有用。)


查看完整回答
反对 回复 2021-05-21
  • 3 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信