【问题标题】:Checkbox Array Compared to Another Array (PHP)复选框数组与另一个数组的比较 (PHP)
【发布时间】:2014-03-12 15:58:23
【问题描述】:

我有一个带有几个复选框的页面。您可以进行任何选择组合。

<form action="result.php" method="post">
    <p>
        <label>
            <input type="checkbox" name="CheckboxGroup1[]" value="choice" id="choice">
            option 1
        </label>
        <br>
        <label>
            <input type="checkbox" name="CheckboxGroup1[]" value="range-all" id="range-all">
            option 2
        </label>
        <br>
        <label>
            <input type="checkbox" name="CheckboxGroup1[]" value="range-two" id="range-two">
            option 3
        </label>
        <br>
        <label>
            <input type="checkbox" name="CheckboxGroup1[]" value="range-two" id="range-two">
            option 4
        </label>
        <br>
        <label>
            <input type="checkbox" name="CheckboxGroup1[]" value="range-other-two" id="range-other-two">
            option 5
        </label>
        <br>

    </p>
    <p>
        <input type="submit">
    </p>
</form>

提交选择后,表单会将您带到下一页,它将复选框选择数组与预定义的选项数组进行比较。

<?php

    $options = array("choice", "range-all", "range-two", "range-other-two");
    $checkboxes = $_POST['CheckboxGroup1'];
    $intersection = array_intersect($options, $checkboxes);
    $results = print_r($intersection, true);

    //these are various scenarios based on what the user could choose
    $scen1var = array("choice", "range-all");
    $scen1 = print_r($scen1var, true);

    $scen2var = array("choice", "range-two");
    $scen2 = print_r($scen2var, true);

    $scen3var = array("choice", "range-other-two");
    $scen3 = print_r($scen3var, true);

    $scen4var = array("range-all", "range-other-two");
    $scen4 = print_r($scen4var, true);

    if ($results === $scen1) { 
        echo "choice and range all";
    }
    elseif ($results === $scen2) {
        echo "range  consumables and range  both";
    }
    //The elseif's carry on in this manner
    else {
        echo "something else";
    }

?>

我现在遇到第一个“if 语句”有效但 elseif 无效的问题。另外,如果我更改第一个“if 语句”以将 $results 与任何其他 $scen 进行比较,即。 $scen2,$scen3,不起作用,只是跳转到“else”部分。

我觉得我说不通,所以如果我能详细解释一下,请告诉我...

同样,我这样做似乎有点过火了。肯定有更简单的方法吗?

【问题讨论】:

  • 您为什么使用print_r() 进行比较?你也可以比较两个数组$array_1 === $array_2,不是吗?

标签: php arrays forms checkbox comparison


【解决方案1】:

您的数组索引已关闭。

if/else 块上方添加:print_r($results);

您会看到选择choicerange-two 输出Array ( [0] =&gt; choice [2] =&gt; range-two ) 而不是Array ( [0] =&gt; choice [1] =&gt; range-two ),这就是$scen2 的含义。

【讨论】:

  • 谢谢!有道理!
【解决方案2】:

问题是array_intersect没有保留数组的key。

<?php

$array1 = array(2, 4, 6, 8, 10, 12);
$array2 = array(1, 2, 3, 4, 5, 6);

var_dump(array_intersect($array1, $array2));
var_dump(array_intersect($array2, $array1));

?>

产生以下结果:

array(3) {
  [0]=> int(2)
  [1]=> int(4)
  [2]=> int(6)
}

array(3) {
  [1]=> int(2)
  [3]=> int(4)
  [5]=> int(6)
}

你将不得不更换

$scen1var = array("choice", "range-all");
$scen2var = array("choice", "range-two");
$scen3var = array("choice", "range-other-two");
$scen4var = array("range-all", "range-other-two");

$scen1var = array(1=>"choice", 2=>"range-all");
$scen2var = array(1=>"choice", 3=>"range-two");
$scen3var = array(1=>"choice", 4=>"range-other-two");
$scen4var = array(2=>"range-all", 4=>"range-other-two");

我强烈建议您更改解决此问题的方法,因为这可能不像看起来那么可靠..

这是我的建议:

$checkboxes = $_POST['CheckboxGroup1'];
if(count($checkboxes) == 2 && 
   in_array('choice', $checkboxes) && 
   in_array('range-all', $checkboxes)
){
    // choice and range only
}
// etc.

当然,有很多方法可以做这种事情。另一种方法。

$choice = false;
$range_all = false;
$range_two = false;
$range_other_two = false;
foreach($_POST['CheckboxGroup1'] as $checkbox)
{
    if($checkbox == 'choice')
    {
        $choice = true;
    }
    elseif($checkbox == 'range_all')
    { 
        $range_all = true;
    }
    //etc
}

if($choice && $range_all && !$range_two && !$range_other_two)
{
    // choice and range_all only.
}
// etc.

【讨论】:

  • 嗨 Nico,感谢您的快速回复。我会改变并让你知道......你认为你可以建议我研究的其他方法吗?非常感谢!
  • 非常感谢。这对我来说似乎很有意义。我会试一下!再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
相关资源
最近更新 更多