来自POST的PHP关联数组

时间:2014-03-20 17:05:53

标签: php html arrays

我从一些POST数据构建了以下数组,我通过print_r

获取了这个数据
print_r($_POST['options']);
Array ( 
    [0] => Array ( 
        ['member_id'] => 6 
        ['leadership_id'] => 0 ) 
    [1] => Array ( 
        ['member_id'] => 7 
        ['leadership_id'] => 1 ) 
    [2] => Array ( 
        ['member_id'] => 2 
        ['leadership_id'] => 2 ) ) 

这对我来说似乎是正确的,但如果我试图在foreach中查看它:

foreach ($_POST['options'] as $test) {
    echo $test['member_id'];
    echo $test['leadership_id'];
}

这只会让我回到以下错误:

Notice: Undefined index: member_id
Notice: Undefined index: leadership_id

它似乎每次都会通过循环发送错误,因此它显然没有被正确引用。

我认为foreach会将$ test循环通过它作为$ test [0] [' member_id'],但这似乎是错误的,因为它的响应方式。

让它起作用的东西让我想到试验另一个循环:

foreach ($_POST['options'] as $tmp) {
    foreach ($tmp AS $opt) {
        echo $opt['member_id'];
        echo $opt['leadership_id'];
    }
}   

我认为第一个foreach只看到一个数组,所以第二个找到其余数组,但是当我打印出变量时它看起来很奇怪:

Member ID: 6
Leadership_ID: 6
Member ID: 0
Leadership_ID: 0
Member ID: 7
Leadership_ID: 7
Member ID: 1
Leadership_ID: 1
Member ID: 2
Leadership_ID: 2
Member ID: 2
Leadership_ID: 2

关于HTML加载数据的方式可能存在问题,这是一个例子:

<input type="hidden" name="options[0]['member_id']" value="6">Name
<select name="options[0]['leadership_id']">
    <option value="0">None</option>
    <option value="1">Small Unit</option>
    <option value="2">Large Unit</option>
</select><br />

<input type="hidden" name="options[1]['member_id']" value="7">Pyras
<select name="options[1]['leadership_id']">
    <option value="0">None</option>
    <option value="1">Small Unit</option>
    <option value="2">Large Unit</option>
</select><br />

3 个答案:

答案 0 :(得分:1)

你对这段代码有什么看法:

foreach ($_POST['options'] as $test) {
    print_r($test);
}

发布所有内容。

编辑1 :试试这个:

foreach ($_POST['options'] as $test) {
    if (isset($test['member_id']) && isset($test['leadership_id'])) {
        var_dump($test['member_id']);
        var_dump($test['leadership_id']);
    } else {
        echo 'Bad Values:' . var_dump($test);
    }
}

你得到了什么?

编辑2 : 看起来你的钥匙还有额外的“钥匙”。你的HTML是什么?如果那不是一个选项,请执行:

foreach ($_POST['options'] as $test) {
    if (isset($test["'member_id'"]) && isset($test["'leadership_id'"])) {
        var_dump($test["'member_id'"]);
        var_dump($test["'leadership_id'"]);
    } else {
        echo 'Bad Values:' . var_dump($test);
    }
}

编辑3

将您的HTML更改为:

<input type="hidden" name="options[0][member_id]" value="6">Name
<select name="options[0][leadership_id]">
    <option value="0">None</option>
    <option value="1">Small Unit</option>
    <option value="2">Large Unit</option>
</select><br />

<input type="hidden" name="options[1][member_id]" value="7">Pyras
<select name="options[1][leadership_id]">
    <option value="0">None</option>
    <option value="1">Small Unit</option>
    <option value="2">Large Unit</option>
</select><br />

答案 1 :(得分:0)

You need to access it like this:
foreach($options as $key=>$opt){
  echo $opt["member_id"];
  echo $opt["leadership_id"];
}

答案 2 :(得分:0)

代码工作正常,所以这是另一个问题。

以下是一个工作示例:http://sandbox.onlinephpfunctions.com/code/cf657dd63428e5199ddd22c643fa464c0657b43f

也许上下文会帮助我们解决问题。