1

注意:我对如何将任何内容解析为 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>使用。

4

2 回答 2

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 字段

于 2013-08-07T14:13:46.633 回答
0

简单地更改exampleexample[]和是最简单secondsecond[]。到达那里后,您可以执行以下操作:

$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。

于 2013-08-07T14:19:53.767 回答