0

我想在一个相互连接的 for 循环中获得 3 个 int 值。我基本上想要的是这样的:

000
001
002
003
010
011
...
323
330
331

我希望变量中的 3 个数字中的每一个都从 0 开始,最大为 3,当它高于 3 时,它会将剩下的数字增加 1

例如

for($i = 0; $i <= $array; $i++){
 echo $a . $b . $c . "<br />"; //Output would be the example I showed above
}
4

4 回答 4

4

您可以使用base_convert在任意基数之间进行转换,在您的情况下基数为 4。

for($i=0, $max = base_convert(333, 4, 10); $i < $max; ++$i) {
  echo base_convert($i, 10 , 4);
}

要获得 0 填充输出,请使用带有格式说明符的 printf:

printf('%03d', base_convert($i, 10 , 4));
于 2013-09-18T12:24:49.283 回答
1
for($a = 0; $a <= 3; $a++){
 for($b = 0; $b <= 3; $b++){
    for($c = 0; $c <= 3; $c++){
       echo $a . $b . $c . "<br />";
     }
  }
}
于 2013-09-18T12:23:22.053 回答
1
for($i = 0; $i <= 63; $i++){
 $c = $i % 4;
 $b = ($i - $c)/4 % 4;
 $a = (($i - $c)/4 - $b)/4;
 echo $a . $b . $c . "<br />"; //Output would be the example I showed above
}

这实际上只是 knittl 答案的明确版本。for 循环让我们逐步遍历从 0 到 63 的每个数字,这恰好与以 4 为底的 0 到 333 对应。然后我们以 10 为底的 $i 逐步将其转换为以 4 为底的数字。% 是模运算符 - 它返回除法后的余数。最不重要的 char 只是 $i/4 的余数,所以我们将其保存为 $c。下一个字符是 4 位(如以 10 为底的 10 位)。所以我们减去 $c,它已经被计算并除以 4 并做同样的事情。

于 2013-09-18T12:25:41.977 回答
1

试试这个:

$count = 20; //how many numbers do you want
for($i =0; $i<$count; $i++) {
    echo str_pad(base_convert($i, 10, 4),3,'0' , STR_PAD_LEFT) . '<br/>';
}

base_convert()将每个 $i 值从 10 基数转换为 4。

str_pad()用 '0' 填充给定长度(此处为 3)。

STR_PAD_LEFT表示应在左侧添加零。

于 2013-09-18T12:29:33.880 回答