从select中获取所有可能的键和值

时间:2013-08-07 14:05:20

标签: php

注意:我对如何将任何内容解析为HTML不感兴趣。我已经知道了。在这种情况下,我正在从一个站点中提取HTML,并且我试图找到最佳方法来生成所有不同键和多个选择可以产生的值的数组。

我正在尝试使用<select><option>转换页面,我在其中获取name=""value=""以获取值。这些数据将被传输到一个数组:

<select name="example">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

会给:

array(array('example' => 1),
      array('example' => 2),
      array('example' => 3))

但是,在我的情况下可能有多个<select>,所以我需要一些逻辑来获取这些值并在该数组中创建所有可能的组合。我希望将这些作为一个包含4个数组的数组,其中包含2个相同的键,但值不同:

<select name="example">
    <option value="1">1</option>
    <option value="2">2</option>
</select>
<select name="second">
    <option value="1">1</option>
    <option value="2">2</option>
</select>

会变成:

array(array('example' => 1,
            'second'  => 1),
      array('example' => 1,
            'second'  => 2),
      array('example' => 2,
            'second'  => 1),
      array('example' => 2,
            'second'  => 2))

php中哪种方法更适合创建这些数组?我能想到的只有几个循环。我希望这个解决方案具有可扩展性,并尽可能多地使用<select>

2 个答案:

答案 0 :(得分:0)

为什么不直接组合这样的键?

$buildqueryarray=array();
$buildqueryarray[]=$_POST['example1'];
$buildqueryarray[]=$_POST['example2'];
$buildqueryarray[]=$_POST['example3'];
$buildqueryarray[]=$_POST['example4'];

$query="";
foreach($buildqueryarray as $k=>$v){
   $query=$k."=".$v."&";
}

$query=substr($query,0,-1);

然后,您最终会根据给定的$ _POST请求构建查询。你只需要将这些添加到buildqueryarray,因为我不知道哪些$ _POST字段存在

答案 1 :(得分:0)

最简单的做法是将example更改为example[],将second更改为second[]。到那里,你可以这样做:

$array = array();
$select1 = $_POST['example'];
$select2 = $_POST['second'];
array_push($array, ["example" => $select1[0], "second" => $select2[0]]);
array_push($array, ["example" => $select1[1], "second" => $select2[0]]);
array_push($array, ["example" => $select1[0], "second" => $select2[1]]);
array_push($array, ["example" => $select1[1], "second" => $select2[1]]);

数组$array现在将包含您想要的内容。

要获得实际组合,您可以使用Math_Combinatorics类,如以下链接所示:

http://pyrus.sourceforge.net/Math_Combinatorics.html

你会做这样的事情:

$combinatorics = new Math_Combinatorics;
$a = $combinatorics->combinations(array(
    "example" => 2,
    "second" => 2,
    ), 2);

$a现在将包含x个数组,每个数组包含您输入的任何数字的唯一两个数字组合。然后,您可以将它们用于索引。只需包含该数组的索引代替我在硬编码的版本中输入的0和1。