按顺序轮流拆分数组

有如下一个数组

$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,
    ],
];
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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;
}
1年前 评论
webeditor (楼主) 1年前
讨论数量: 3

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

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

用代码说明一下

Laravel

1年前 评论
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;
}
1年前 评论
webeditor (楼主) 1年前

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