来自POST的PHP关联数组

来自POST的PHP关联数组,php,html,arrays,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'] =>

我用一些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 ($_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 />
名称
没有一个
小单位
大单位

皮拉斯 没有一个 小单位 大单位

这段代码有什么好处:

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 />
名称
没有一个
小单位
大单位

皮拉斯 没有一个 小单位 大单位

代码工作正常,因此这是另一个问题

下面是一个工作示例:


也许上下文可以帮助我们解决这个问题。

尝试使用foreach($\u POST['options']as$key=>$test),这似乎没有什么区别。它应该检查我的答案。我已经创建了一个示例,因为您在这里使用的数据结构与您的完全相同。您是否在迭代之前打印$_POST['options']来测试它,以便确定传入的数据?我会冒险猜测,当数据丢失时会发生错误。检查
isset()
。此代码与op的原始代码有什么区别?op省略了$key,因为它未被使用。区别在于,如果您的数组是单级数组,则表示:数组('member\u id'=>'test','leadership\u id'=>'test2');你的代码会工作得很好。但是因为你有一个数组,你需要在第二层循环数组。虽然这没有解决它,但它确实让我找到了一种方法使它工作。这引起了我的思考,我在循环中添加了另一个foreach,现在它似乎工作得很好。foreach($_POST['options']作为$tmp){foreach($tmp作为$opt){echo$opt['member_id'];echo$opt['leadership_id'];}}}@user2411276见-。两个foreach之间的区别很简单,一个是键、值对,而另一个只是值。试试这个:$myar=array(array('member\u id'=>6,'leadership\u id'=>0),array('member\u id'=>7,'leadership\u id'=>1));回声“;foreach($k=>$v的迈亚尔){print_r($v['member_id']);}echo”“;我给你们的代码是有效的,它只是访问数据的另一种方式。您可以通过key=>value的方式进行操作,也可以通过另一个循环来访问数组值,这取决于您自己。但是我给你的代码也应该得到同样的结果。运行它会得到这个结果:数组(['member\u id']=>6['leadership\u id']=>0)数组(['member\u id']=>7['leadership\u id']=>1)数组(['member\u id']=>2['leadership\u id']=>2)更新给了我数组(['member\u id']=>6['leadership\u id']=>0)坏值:1数组(['member\u id']=>7['leadership\u id']=>1)错误值:1阵列(['member\u id']=>2['leadership\u id']=>2)错误的值:1奇怪的是,这些值总是应该设置的,因为它们来自一个只有一个隐藏字段和一个select的表单,所以数据不可能不在那里。@DarkSnake你能用var_dump再试一次吗?我怀疑键的设置不正确。第一个是foreach级别1:array(3){[0]=>array之后的基秒(2) {[“'member\u id'”=>string(1)“6”[“'leadership\u id'”=>string(1)“0”}[1]=>array(2){[“'member\u id'”=>string(1)“0”}[2]=>array(2){[“'member\u id'”=>string(1)“2”[“'leadership\u id'”=>string(1)“2”}级别2:array(2){“member\u id'”=>string(1)“1)”leadership”=>第二级:数组(2){[“'member\u id'”=>string(1)“7”[“'leadership\u id'”=>string(1)“0”}第二级:数组(2){[“'member\u id'”=>string(1)“2”=>string(1)“2”}你的密钥是“member\u id”而不是member\u id,你需要说明一个额外的“成员id”。你的HTML是什么样的?
You need to access it like this:
foreach($options as $key=>$opt){
  echo $opt["member_id"];
  echo $opt["leadership_id"];
}