猿问

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

我需要将“ 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

        )



)


HUX布斯
浏览 127回答 3
3回答

慕桂英3389331

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

慕慕森

有两种方法。这是您必须在原始数组中指定键路径以更改值的方法,因为默认情况下它不会通过引用传递子数组。$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++;       }}

蛊毒传说

如果重复的用户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]];    }}(似乎不是这样,因为您已经接受了一个不这样做的答案,但是我已经写了它,所以无论如何它都会贴出来,以防对其他发现它的人有用。)
随时随地看视频慕课网APP
我要回答