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

时间:2019-04-26 17:50:05

标签: php arrays

我需要将'transaction_user_id'的值更改为递增的数字。 如果数组具有键[transaction_user_id],则应将其赋值为1,以此类推。例如,如果数组具有[transaction_user_id],则[transaction_user_id] = 1,第二个为[transaction_user_id] =2。

<system.web>
    <httpRuntime targetFramework="4.6.2" maxRequestLength="200000" />
    <!-- maxRequestLength is in KB, not B -->
</system.web>

3 个答案:

答案 0 :(得分:3)

您可以使用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
    )

  )

答案 1 :(得分:2)

有两种方法。

您必须在原始数组中指定键路径才能更改值 因为默认情况下它不会通过引用传递子数组。

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

答案 2 :(得分:0)

如果重复的用户ID需要对应于相同的增量号,例如,如果由于数组2和3都具有相同的transaction_user_id而应同时分配数组2和3,则您必须随时跟踪该关系

迭代数据,更新一个数组,该数组在您进行操作时将transaction_user_id映射到新的增量ID。如果找到一个新的,则在数组中为其分配一个递增的值。然后用正确的增量值替换数据中的值。

if(fredrikVald)
{
//add code here
spelare.setText("Fredrik Used Fireball");
}

(似乎不是这种情况,因为您已经接受了不这样做的答案,但是我已经写了,所以无论如何它都会贴出来,以防其他人找到它。)