按顺序轮流拆分数组

有如下一个数组

$user = [
    [
        'user_id' => 1,
        'sub_count' => 2
    ],
    [
        'user_id' => 2,
        'sub_count' => 3
    ],
    [
        'user_id' => 3,
        'sub_count' => 2
    ],
    [
        'user_id' => 4,
        'sub_count' => 1
    ],
];

用什么方法能够按照 sub_count 的值,按顺序拆分该数组,比如 user_id 为 1, 2, 3, 4 循环完一次,继续按照顺序循环,直到sub_count 循环完结束。 拆分完数组如下

$user = [
    [
        'user_id' => 1
    ],
    [
        'user_id' => 2,
    ],
    [
        'user_id' => 3,
    ],
    [
        'user_id' => 4,
    ],
    [
        'user_id' => 1
    ],
    [
        'user_id' => 2,
    ],
    [
        'user_id' => 3,
    ],
    [
        'user_id' => 2,
    ],
];
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
public function index(Request $request)
{
    $user = [
        [
            'user_id' => 1,
            'sub_count' => 2
        ],
        [
            'user_id' => 2,
            'sub_count' => 3
        ],
        [
            'user_id' => 3,
            'sub_count' => 2
        ],
        [
            'user_id' => 4,
            'sub_count' => 1
        ],
    ];
    $tmp = $user;
    return demo($tmp);
}
function demo(&$data)
{
    static $user = [];
    foreach ($data as $k => $v)
    {
        if ($v['sub_count'] <= 0)
        {
            unset($data[$k]);
            continue;
        }

        $data[$k]['sub_count']--;
        $user[]['user_id'] = $v['user_id'];
    }

    if (!empty($data))
        demo($data);

    return $user;
}
2年前 评论
webeditor (楼主) 2年前
讨论数量: 3

将 每个 user 按照 sub_count 的值作为循环次数,并设置一个排序值(根据 user_id 和 循环数 i 做一个设计),重新获得一个新的大数组
结果相当于是 2个 user_id 1, 3个 user_id 2… ,最后根据排序值 排序即可

新的大数组类似这样:
file
sort 值的方式可以找个好的设计算法,循环数 i 在前面!!!

用代码说明一下

Laravel

2年前 评论
public function index(Request $request)
{
    $user = [
        [
            'user_id' => 1,
            'sub_count' => 2
        ],
        [
            'user_id' => 2,
            'sub_count' => 3
        ],
        [
            'user_id' => 3,
            'sub_count' => 2
        ],
        [
            'user_id' => 4,
            'sub_count' => 1
        ],
    ];
    $tmp = $user;
    return demo($tmp);
}
function demo(&$data)
{
    static $user = [];
    foreach ($data as $k => $v)
    {
        if ($v['sub_count'] <= 0)
        {
            unset($data[$k]);
            continue;
        }

        $data[$k]['sub_count']--;
        $user[]['user_id'] = $v['user_id'];
    }

    if (!empty($data))
        demo($data);

    return $user;
}
2年前 评论
webeditor (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!