我有一个像这样的数组:
Array ( [0] => 0 [1] => 0 [2] => 0 );
有3个元素(3个整数),我希望它们从0增加到36;
我知道最好的方法是递归,因为必须检查每个元素以查看它是否处于最大值(36),如果是,则将最后一个元素设置为0并递增前一个元素。 p>
所以我的阵列基本上想要像:
Array ( [0] => 0 [1] => 0 [2] => 0 );
Array ( [0] => 0 [1] => 0 [2] => 1 );
Array ( [0] => 0 [1] => 0 [2] => 2 );
...
Array ( [0] => 0 [1] => 0 [2] => 36 );
Array ( [0] => 0 [1] => 1 [2] => 0 );
Array ( [0] => 0 [1] => 1 [2] => 1 );
....
Array ( [0] => 0 [1] => 1 [2] => 36 );
Array ( [0] => 0 [1] => 2 [2] => 0 );
ETC ETC ETC
但我不知道如何以递归的方式做到这一点!
然而,该解决方案还需要适用于4个元素和5个元素以及6个等等!
有人可以给我指点吗?
答案 0 :(得分:2)
如果您只想要一个基数为37的数字,请考虑改为使用base_convert。
答案 1 :(得分:2)
$limit = 36;
$step = 1;
$array = array ( 0 , 0 , 0 );
function increment( array $array , $limit , $step ) {
$result = $array = array_values( $array );
while( count( array_keys( $result , $limit ) ) != count( $array ) ) {
for( $i = 1 ; $i <= count( $result ) ; $i++ ) {
while( $result[ count( $result )-$i ] < $limit ) {
$result[ count( $result )-$i ] += $step;
}
}
}
return $result;
}
var_dump( increment( $array , $limit , $step ) );
答案 2 :(得分:2)
类似于Timurs的答案,但效率稍高,并且需要变量基础。
$array = array(0, 0, 0);
function bloop(&$array, $amount, $base = 37)
{
$i = count($array) - 1;
while ($i >= 0) {
$array[$i] = $amount % $base;
$amount = ($amount - $array[$i--]) / $base;
}
}
bloop($array, (37 * 37 * 2) + (37 * 5) + 8); // 2, 5, 8
var_dump($array);
答案 3 :(得分:1)
function fill($limit){
$ret = array();
while($i<=$limit){
while($j<=$limit){
while($k<=$limit){
$ret[] = array($i,$j,$k);
print_r($a);
$k++;
}
$j++;
}
$i++;
}
return $ret;
}
fill(36);
答案 4 :(得分:1)
function increment(&$array,$num){
$plus = $num;
for( $i=count($array)-1;$i>=0;$i-- ){
$array[$i] += $plus;
if( $array[$i]>36 ){
$tmp = $array[$i]%37;
$plus = ($array[$i]-$tmp)/37;
$array[$i] = $tmp;
}else{
break;
}
}
}
// init array
$array = array( 0,0,0 );
// increment 100 times
increment($array,100);
var_dump($array);
答案 5 :(得分:1)
这个怎么样?
<?php
$arr = array(0=>0,2=>0);
foreach (range(0,36) as $f )
{
echo "<pre>";print_r(array_pad(array($f),3,0));
echo "<pre>";print_r(array_pad(array($f),-3,0));
$arr_n = $arr+array(1=>$f);
ksort($arr_n);
echo "<pre>"; print_r($arr_n);
}
?>