圆圈算法
$num = $quan = $direct = 0; $arr = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); $result = array(); while(1) { //取一个数 $key = get_one($arr,$result); //方向只有4个 0(左),1(右),2(上),3(下) 去摸求余可得 $result[$key] = $direct % 4; if($num==0) { $num++; continue; } $tmp = $num; //取num个数标志第二个方向 $direct++; for(;$tmp>0;$tmp--) { // 取数 $key = get_one($arr, $result); $result[$key] = $direct % 4; } $direct++; //再取一次num个数标志第三个方向 $tmp = $num; for(;$tmp>0;$tmp--) { // 取数 $key = get_one($arr, $result); $result[$key] = $direct % 4; } $num++; $quan++; } //取一个数 function get_one(&$arr, &$result) { $value = array_shift($arr); if (!$value) { print_r($result); exit; } return $value; }
结果
Array ( [1] => 0 [2] => 0 [3] => 1 [4] => 2 [5] => 2 [6] => 3 [7] => 3 [8] => 0 [9] => 0 [10] => 0 [11] => 1 [12] => 1 [13] => 1 [14] => 2 [15] => 2 [16] => 2 )