在php中提取一个数字索引数组

时间:2014-10-07 12:13:43

标签: php arrays

我有一些动态构建输入字段,其形式如下:

<input type="text" class="form-control" name="person[]" placeholder="Person" />
<input type="text" class="form-control" name="function[]" placeholder="Function" />

<input type="text" class="form-control" name="person[]" placeholder="Person" />
<input type="text" class="form-control" name="function[]" placeholder="Function" />

<input type="text" class="form-control" name="person[]" placeholder="Person" />
<input type="text" class="form-control" name="function[]" placeholder="Function" />

因为我写了这样的输入名称:person[]&amp; function[]我在$_POST数组中获得了一个数字索引数组。 由于输入字段是动态的,因此无法确定有多少person[]&amp; function[]中会有$_POST个索引号。

我该如何处理?换句话说,如果我想INSERT person[0] + function[0] & person[1] + function[1] + ...(可变数量的人和他们的功能)进入我的数据库怎么办?我怎么能提取这个,所以有可能这样做?

注意:每个人都有自己的功能,因此保持在一起非常重要。

我没有走得太远所以我无法提供更多我尝试过的代码:

foreach ($_POST['person'] as $value){
...
} 

这为我提供了person[]内部特定数组$_POST的列表,但这对我没用..

3 个答案:

答案 0 :(得分:2)

听起来有“人”的数量与“功能”的数量相同。如果是这种情况,那么你可以这样做:

foreach($_POST['person'] as $key => $value) {
    echo 'Person ' . $value . ' has function ' . $_POST['function'][$key] . '<br>';
}

答案 1 :(得分:1)

如果您没有办法确保此人和功能输入以某种方式捆绑在一起,则此表单设计将导致问题。想象一下有人填写表格,他们将这个功能留空了一个人:

Person    Function

Anna      array_map
Betty
Claire    count
          date_format

表单逻辑不会将Betty的函数视为空白,而是将BettycountClairedate_format配对。因此,最好将每个人/功能组合与ID分组,以便您区分它们。使用JS或PHP中的迭代器很容易。

新表格:

<input type="text" class="form-control" name="persfunc[1][p]" placeholder="Person" />
<input type="text" class="form-control" name="persfunc[1][f]" placeholder="Function" />

<input type="text" class="form-control" name="persfunc[2][p]" placeholder="Person" />
<input type="text" class="form-control" name="persfunc[2][f]" placeholder="Function" />

<input type="text" class="form-control" name="persfunc[3][p]" placeholder="Person" />
<input type="text" class="form-control" name="persfunc[3][f]" placeholder="Function" />

<input type="text" class="form-control" name="persfunc[4][p]" placeholder="Person" />
<input type="text" class="form-control" name="persfunc[4][f]" placeholder="Function" />

然后,您可以使用这样的函数来处理数据:

    # gather up all the 'persfunc' data from $_POST
    if (! empty($_POST['persfunc'])) {
        # initialise an array for the results
        $pers_func_arr = array();

        foreach ($_POST['persfunc'] as $pf) {
            # make sure that both $persfunc[x]['p'] and $persfunc[x]['f'] have values
            if (
                isset($pf['p'])
                && isset($pf['f'])
                && strlen($pf['p']) > 0
                && strlen($pf['f']) > 0
            ) {
                # you've got a pair! Do whatever you want with them.

                # e.g. print out the name/function pair:
                echo "<p>Person " . $pf["p"]
                    . " has function " . $pf["f"]."</p>";

                # e.g. add them to a data structure for later use
                $pers_func_arr[] = array( $pf["p"], $pf["f"] );
            }
        }
    }

为此表单提供之前的狡猾的输入数据,并检查输出:

Person Anna has function array_map

Missing full data for person_2

Person Claire has function count

Missing full data for person_person_4

这是处理表单数据的一种更健壮的方式,而不仅仅是相信您的输入会匹配,并且它不需要更多的编码。

答案 2 :(得分:0)

这样的事情可能会起作用

$sql = "INSERT INTO tbl (Person,Function) VALUES ";
$components = array();

$totalitemcount = count($_POST['person']);

for ($i=0;$i<=$totalitemcount;$i++) {
    $components[] = "('".$_POST['person'][$i]."','".$_POST['function'][$i]."')";
}

$insertstring = implode(",",$components);

$finalsql = $sql.$insertstring;

//do insert here