列出 PHP 中 php 布尔值数组中的所有可能组合
List all combination possible in a php array of boolean value in PHP
我会尽力更好地解释我的需求。
我需要从 scrach 生成一个包含许多数组的多向数组。内部数组必须是包含 7 个布尔值的数组。我需要拥有 7 个布尔值的所有可能组合。有 7 个案例,它构成 128 个内部数组。
这是我需要的输出示例,以便于理解:
$sequence = array(
array(true, true, true, true, true, true, true),
array(true, true, true, true, true, true, false),
array(true, true, true, true, true, false, false)
);
我需要对每个 7 数组值进行布尔值的所有可能组合。
我试图在发布之前找到解决方案,但我一无所获。
感谢您的帮助
P-S.: 稍后,我将需要做同样的事情,但每个 table 有 30 个布尔值,而不是 7 个。因此,如果解决方案可以灵活,那就更好了!
解决方案:
这就是我成功得到我需要的东西的方式,对我检查的解决方案进行了一些修改。
<?php
$length = 7;
$totalCombos = pow(2, $length);
$sequences = array();
for($x = 0; $x < $totalCombos; $x++) {
$sequence[$x] = str_split(str_pad(decbin($x), $length, 0, STR_PAD_LEFT));
}
?>
我已经添加了 str_split 以获得一个独立值的数组。
这样就可以了,而且很灵活。
<?php
$length = 7;
$totalCombos = pow(2, $length);
for($x = 0; $x < $totalCombos; $x++) {
echo str_pad(decbin($x), $length, 0, STR_PAD_LEFT) . PHP_EOL;
}
这是一个基于位运算符和短语法的解决方案:
$length = 7;
$totalCombos = 2 ** $length;
$sequences = [];
for($i = 0; $i < $totalCombos; $i++) {
$row = [];
for ($j = 0; $j < $length; $j++) {
$row[] = (bool)(($i >> $length) & 1);
}
$sequences[] = $row;
}
我会尽力更好地解释我的需求。
我需要从 scrach 生成一个包含许多数组的多向数组。内部数组必须是包含 7 个布尔值的数组。我需要拥有 7 个布尔值的所有可能组合。有 7 个案例,它构成 128 个内部数组。
这是我需要的输出示例,以便于理解:
$sequence = array(
array(true, true, true, true, true, true, true),
array(true, true, true, true, true, true, false),
array(true, true, true, true, true, false, false)
);
我需要对每个 7 数组值进行布尔值的所有可能组合。
我试图在发布之前找到解决方案,但我一无所获。
感谢您的帮助
P-S.: 稍后,我将需要做同样的事情,但每个 table 有 30 个布尔值,而不是 7 个。因此,如果解决方案可以灵活,那就更好了!
解决方案: 这就是我成功得到我需要的东西的方式,对我检查的解决方案进行了一些修改。
<?php
$length = 7;
$totalCombos = pow(2, $length);
$sequences = array();
for($x = 0; $x < $totalCombos; $x++) {
$sequence[$x] = str_split(str_pad(decbin($x), $length, 0, STR_PAD_LEFT));
}
?>
我已经添加了 str_split 以获得一个独立值的数组。
这样就可以了,而且很灵活。
<?php
$length = 7;
$totalCombos = pow(2, $length);
for($x = 0; $x < $totalCombos; $x++) {
echo str_pad(decbin($x), $length, 0, STR_PAD_LEFT) . PHP_EOL;
}
这是一个基于位运算符和短语法的解决方案:
$length = 7;
$totalCombos = 2 ** $length;
$sequences = [];
for($i = 0; $i < $totalCombos; $i++) {
$row = [];
for ($j = 0; $j < $length; $j++) {
$row[] = (bool)(($i >> $length) & 1);
}
$sequences[] = $row;
}