我有一个问题,从一行数字中得到最小值和最大值,其中的特殊差异是1800。为了更好地理解,我想给你们举下面的例子:
array(0,1800,3600,5400,7200,12600,14400,16200,23400,25200);
我的数字行的特殊差别是1800。当一个数字与下一个数字正好有1800的差时,它们是同一行的数字。如果不是,它们是另一行的编号。因此,我需要一个函数,它将为上面提到的数组生成以下输出:
我希望你能理解我的问题。对不起,我的英语,并感谢提前。
发布于 2017-03-20 00:59:01
最好向您展示一些您已经尝试过的代码。但是,这里有一个非常简短的代码示例,我把它们放在一起。
$lists = [];
$special = 1800;
$array = [0, 1800, 3600, 5400, 7200, 12600, 14400, 16200, 23400, 25200];
$currentList = [];
foreach ($array as $number) {
if (empty($currentList)) {
$currentList[] = $number;
} else {
$last =(end($currentList) + $special);
if ($number === $last) {
$currentList[] = $number;
} else {
$lists[] = $currentList;
$currentList = [$number];
}
}
}
$lists[] = $currentList;
var_dump($lists);
这将输出以下数组,可以在所需的输出中转换该数组。
array (size=3) 0 =>
array (size=5)
0 => int 0
1 => int 1800
2 => int 3600
3 => int 5400
4 => int 7200 1 =>
array (size=3)
0 => int 12600
1 => int 14400
2 => int 16200 2 =>
array (size=2)
0 => int 23400
1 => int 25200
发布于 2017-03-20 00:58:12
您可以创建一个帮助函数来迭代输入,并将值添加到行数组中。
function getRows($input, $specialDifference) {
$rows = array();
$newRow = true;
for ($index = 0; $index < count($input); $index++) {
if ($newRow) {
$rows[] = array();
$newRow = false;
}
$rows[count($rows) - 1][]= $input[$index];
$newRow = ((count($input) > $index + 1) && ($input[$index + 1] - $input[$index] !== $specialDifference));
}
return $rows;
}
https://stackoverflow.com/questions/42899065
复制相似问题