我有一个几乎有50K + 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('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_array,所以它们看起来像这样:
$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'
有谁知道怎么做?
答案 0 :(得分: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);