Php 查找对哪些唯一数字求和以生成结果数
在我的网站上,我有多个复选框字段,其中每个输入的值都是前一个的两倍,如下所示:Php 查找对哪些唯一数字求和以生成结果数,php,mysql,math,Php,Mysql,Math,在我的网站上,我有多个复选框字段,其中每个输入的值都是前一个的两倍,如下所示: <form name=test> <input type='checkbox' name='groupe' value = '1'> <input type='checkbox' name='groupe' value = '2'> <input type='checkbox' name='groupe' value = '4'> <input type='che
<form name=test>
<input type='checkbox' name='groupe' value = '1'>
<input type='checkbox' name='groupe' value = '2'>
<input type='checkbox' name='groupe' value = '4'>
<input type='checkbox' name='groupe' value = '8'>
<input type='checkbox' name='groupe' value = '16'>
etc...
</form>
我需要检索所选的值以创建第5个结果
有关信息如下:
-31(最大结果,即每个字段1+2+4+8+16之和)
-使用2+2+1不可能得到结果值5,因为一个输入不能选择两次
我做了很多搜索来解决这个问题,但是我找不到任何有用的东西。如何在SQL或PHP中实现这一点?如果将最终数字分解为二进制,因为它是2的幂和,每一位对应一个复选框 您可以使用逐位运算符检查这些位的设置 例如:
if ($groupe & 4) {
//if bit 000100 was set
}
我不确定这是否是您想要的,但基本上,您在PHP中读取输入表单元素状态的方式是通过查看
$\u POST
特殊全局变量
理想情况下,每个复选框都有一个唯一的名称。这样,您就可以确定正在阅读的复选框。如果有多个同名元素,它们将作为数组传递,很可能是按照它们在页面上呈现的顺序传递
因此,要读取复选框的值,可以使用以下方法:
$checkboxes = $_POST['groupe'];
$finalValue = 0;
if(isset($checkboxes)) // make sure you are getting something back
{
if (is_array($checkboxes)) // make sure you are getting back an array
{ // since you have multiple elements named groupe
foreach($checkboxes as $value) {
$finalValue += $value;
}
}
}
我不确定存储总和然后恢复单个值的意义是什么——为什么不存储单独的值呢 也就是说,如果必须的话,算法非常简单:
<?php
print_r(get_parts($argv[1]));
function get_parts($number) {
$res = array();
for ($pow = 1; $pow <= 16; $pow <<= 1)
{
if ($pow & $number) {
array_push($res, $pow);
}
}
return $res;
}
?>
最好的答案,但我认为这是答案的thx,我不明白一切。。什么是$input变量?!我测试了get_parts(5),它返回了一个错误,你有具体的例子吗?@GuillaumeRoyer它实际上是
@albator抱歉,它应该是$input
-只是我测试的一个剩余部分。刚刚更正。@albator我用完整的程序和测试运行更新了我的答案
<?php
print_r(get_parts($argv[1]));
function get_parts($number) {
$res = array();
for ($pow = 1; $pow <= 16; $pow <<= 1)
{
if ($pow & $number) {
array_push($res, $pow);
}
}
return $res;
}
?>
$ php test.php 5
Array
(
[0] => 1
[1] => 4
)
$ php test.php 31
Array
(
[0] => 1
[1] => 2
[2] => 4
[3] => 8
[4] => 16
)