谁能帮我下面这个数组排序
输入$array=array(1,2,3,6,7,8,100,101,200);
输出:$new_array=array(
0=>array(1,2,3),
1=>array(6,7,8),
2=>array(100,101),
3=>array(200)
);
提前感谢!
$array=array(1,2,3,6,7,8,100,101,200);
$new_array = array();
$lastNumber = '';
foreach($array as $number) {
if($lastNumber === '') {
$otherArray = array($number);
}
elseif($lastNumber + 1 !== $number) {
$new_array[] = $otherArray;
$otherArray = array($number);
}
else{
$otherArray[] = $number;
}
$lastNumber = $number;
}
$new_array[] = $otherArray;
print_r($new_array);
可以遍历数组并检查到数组中下一个元素的距离。如果这个距离大于1,则添加一个新的子数组:
$array=array(1,2,3,6,7,8,100,101,200);
$result=array(array());
for($i=0; $i<count($array)-1; $i++)
{
if($array[$i+1]-$array[$i]==1)
{
// If difference to next number is one -> push
array_push($result[count($result)-1], $array[$i]);
}
else
{
// ... else: Push and create new array for the next element
array_push($result[count($result)-1], $array[$i]);
array_push($result, array());
}
}
// Push the last number
array_push($result[count($result)-1], $array[$i]);
print_r($result);
只是array_push()
的不同方法…
非常简单:循环遍历数字,记住最后一个数字,如果当前数字不是上一个数字的后继数,在结果中添加一个新数组,在结果中推入最后一个数组
$result = [];
$last = null;
foreach ($array as $number) {
if ($last !== $number - 1) {
$result[] = [];
}
$result[count($result) - 1][] = $number;
$last = $number;
}
甚至可以去掉$last
,直接读取$result
的最后一个数组元素的最后一个数组元素,但这会使代码实际上更复杂。