// 蛇形编排
public function snake()
{
$n = 5;
if ($n % 2 == 0) {
$count = range(1, $n - 1);
$lun = $n - 1;
$bu = $n;
} else {
$count = range(1, $n);
$lun = $n;
$bu = 0;
}
$tmp = $count;
for ($i = 0; $i < $n / 2; $i++) {
foreach ($tmp as $v) {
array_push($count, $v);
}
}
// 中间数
$middle = ceil($n / 2);
// 一半是多少
$half = $middle - 1;
for ($i = 1; $i <= $lun; $i++) {
// 输出第几轮
echo '第' . $i . '轮</br>';
// 偶数轮,补值在上方左侧
if ($i % 2 == 0) {
echo $bu . '---' . $count[$middle * $i - 1] . '</br>';
}
if ($i == 1) {
for ($l = 0; $l < $half; $l++) {
$leftArr[$l] = $count[$l];
}
for ($r = 0; $r < $half; $r++) {
$rightArr[$r] = $count[$lun - 1 - $r];
}
} else {
// 单数轮逆向取值
if ($i % 2 == 1) {
for ($r = 0; $r < $half; $r++) {
$rightArr[$r] = $count[$middle * $i - 1 + $half - $r];
}
} else {
for ($r = 0; $r < $half; $r++) {
$rightArr[$r] = $count[$middle * $i + $r];
}
}
}
for ($b = 0; $b < $half; $b++) {
echo $leftArr[$b] . '---' . $rightArr[$b] . '</br>';
}
// 奇数轮,补值在下方右侧
if ($i % 2 != 0) {
echo $count[$middle * $i - 1] . '---' . $bu . '</br>';
}
// 右边数组给左边数组
$leftArr = $rightArr;
}
}