0

我有一个包含近 50K+ 子数组的数组。按优先级排列所有这些不是问题,所以我设法让它看起来像这样:

$SendQueue = array(
    array('3', '+553400000001', 'My text messege here'),
    array('3', '+553400000002', 'My text messege here'),
    array('3', '+553400000003', 'My text messege here'),
    array('3', '+553400000004', 'My text messege here'),
    array('3', '+553400000005', 'My text messege here'),
    array('3', '+553400000006', 'My text messege here'),
    array('3', '+553400000007', 'My text messege here'),
    array('3', '+553400000008', 'My text messege here'),
    array('3', '+553400000009', 'My text messege here'),
    array('3', '+553400000010', 'My text messege here'),
    array('3', '+553400000011', 'My text messege here'),
    array('3', '+553400000012', 'My text messege here'),
    array('2', '+553400000013', 'My text messege here'),
    array('2', '+553400000014', 'My text messege here'),
    array('2', '+553400000015', 'My text messege here'),
    array('2', '+553400000016', 'My text messege here'),
    array('2', '+553400000017', 'My text messege here'),
    array('2', '+553400000018', 'My text messege here'),
    array('1', '+553400000019', 'My text messege here'),
    array('1', '+553400000020', 'My text messege here'),
);
//where '3', '2' and '1' are my priorities' types

我真正需要的是交替这些 sub_arrays,所以它们看起来像这样:

$SendQueue = array(
    array('3', '+553400000001', 'My text messege here'),
    array('3', '+553400000002', 'My text messege here'),
    array('3', '+553400000003', 'My text messege here'),
    array('3', '+553400000004', 'My text messege here'),
    array('3', '+553400000005', 'My text messege here'),
    array('3', '+553400000006', 'My text messege here'),
    array('2', '+553400000013', 'My text messege here'),
    array('2', '+553400000014', 'My text messege here'),
    array('2', '+553400000015', 'My text messege here'),
    array('1', '+553400000019', 'My text messege here'),
    array('3', '+553400000007', 'My text messege here'),
    array('3', '+553400000008', 'My text messege here'),
    array('3', '+553400000009', 'My text messege here'),
    array('3', '+553400000010', 'My text messege here'),
    array('3', '+553400000011', 'My text messege here'),
    array('3', '+553400000012', 'My text messege here'),
    array('2', '+553400000016', 'My text messege here'),
    array('2', '+553400000017', 'My text messege here'),
    array('2', '+553400000018', 'My text messege here'),
    array('1', '+553400000020', 'My text messege here'),
);
//Each 10 sub_arrays, 6 of them are priority '3', 3 of them are priority '2' and 1 of them is priority '1'

有谁知道这是怎么做到的吗?

4

1 回答 1

2

你可以试试:

//Group the array
$group = array_reduce($SendQueue, function ($a, $b) {
    $a[$b[0]][] = $b;
    return $a;
});


$final = array();

while(count($final) < count($SendQueue)) {
    // 6 of them are priority '3'
    $final = array_merge($final, array_slice($group[3], 0, 6));
    // 3 of them are priority '2'
    $final = array_merge($final, array_slice($group[2], 0, 3));
    // 1 of them are priority '1'
    $final = array_merge($final, array_slice($group[1], 0, 1));
}

print_r($final);

观看现场演示

于 2013-04-29T17:54:13.460 回答