Foreach $_POST - 如何增加指向下一个元素的数组指针

Posted

技术标签:

【中文标题】Foreach $_POST - 如何增加指向下一个元素的数组指针【英文标题】:Foreach $_POST - how to increase array pointer to the next element 【发布时间】:2014-04-02 12:35:41 【问题描述】:

我正在遍历 $_POST 数组(生成的表单元素),我需要在我的 foreach 循环中获取下一个元素的键和值。

编辑:答案元素的名称(即 canbeanynameABC 和 canbeanynameXYZ)始终未知。

这是一个示例数组:

Array ( 
[inputid] => 87 [inputoutputtype] => radio [canbeanynameABC] => radio answer 2 
[inputid] => 88 [inputoutputtype] => radio [canbeanynameXYZ] => radio answer 4 ) 

我的代码在这里

foreach ($_POST as $key => $value) 

switch ($key) 

    case "inputid":
            echo "<br/>Value of input_id : " . $value;      
        next($_POST);       
        echo "<br/>Value of inputoutputtype : " . $value;
        next($_POST);       
        echo "<br/>Value of answer : " . $value;        
        break;


我认为通过执行 next($_POST),指针现在将定位在下一个键/值上。

显然它不起作用,我得到以下显示:

Value of input_id : 87
Value of input_output_type : 87
Value of answer : 87

任何帮助将不胜感激。谢谢

编辑:有人建议我使用数组来组织我的表单元素/值。我还是不知道怎么用数组让表单返回的每个答案(值),我实际上得到三个值(答案、输入ID、输入输出类型)

编辑:@CBroe 我花了一个下午试图弄清楚如何在 $_POST 中使用数组。表单可以包含任意数量的元素,这些元素可以是文本、单选、选择/选项、复选框(可以返回多个值)。我从这个表单中得到的每个“值”都必须与一个“inputid”和一个“inputoutputtype”相关联。这些表单和元素是使用 php 生成的,所以我正在尝试构建一个 php 表单处理程序,它将读取任意数量的元素和类型。生成器为每个元素创建唯一的名称,这样值就不会被覆盖。我试图弄清楚如何将数组集成到生成器中,但不确定我是否能够为它们分配行号(即 [0]、[1]..).. 也许我只是没有看看数组如何适合我的情况。


更新:好的,现在我正在尝试修改我的 php 表单处理程序以处理可能具有任何名称的元素。我需要能够从表单中填写的元素中读取 id、type 和 value(3 个不同的值)。

我正在使用表单(即使它完全生成),但不确定如何命名我的元素

<input type='hidden' name='inputradio[inputid]' value='1'>
<input type='hidden' name='inputradio[inputoutputtype]' value='radio'>
<input type='radio' name='inputradio[output]' value='Radio answer 1'>

<input type='hidden' name='inputradio[inputid]' value='2'>
<input type='hidden' name='inputradio[inputoutputtype]' value='radio'>
<input type='radio' name='inputradio[output]' value='Radio answer 2'>

<input type='hidden' name='inputtext1[inputid]' value='3'>
<input type='hidden' name='inputtext1[inputoutputtype]' value='text'>
<input type='text' name='inputtext1[output]' value='Text answer 1'>

<input type='hidden' name='inputtext2[inputid]' value='4'>
<input type='hidden' name='inputtext2[inputoutputtype]' value='text'>
<input type='text' name='inputtext2[output]' value='Text answer 2'>

如果方向改变了,我应​​该改变这篇文章的标题吗?

谢谢 C

【问题讨论】:

我不了解 PHP,但据我所知,这不是您使用 next(...) 方法的方式。据我所知,next(...) 方法用于推进数组的内部指针(对吗?或类似的东西?)任何人,$key$value 是你正在使用的,而不是内部指针.所以我会重写开关来处理所有三种情况,然后忽略第四种/第五种(如果这是你想要的),看看它是否有效。似乎因为您引用了数组的内部指针,所以调用$key$value 并没有做太多事情。有意义吗? 你的方法从一开始就有缺陷。与其尝试在 foreach 循环中访问下一个元素和之后的元素,不如先以一种获得可用数据结构的方式命名表单元素。提示:您可以在表单元素名称中使用[] 在$_POST 中创建数组,您甚至可以指定所需的索引,f.e. name="foo[0][id]name="foo[0][outputtype] 我认为这更像是一个答案而不是评论。 【参考方案1】:

$_POST 中的条目只有两个属性,即键和值。我不知道你从哪里得到你的示例数组,但它不是那样工作的。因此,如果我有一个所有共享相同名称的单选按钮组,我将获得名称-> 值对。

如果我创建了以下表单并在单选按钮组中选择了值 a 并提交了它:

<form method="POST" >
    <input type="text" name="textbox" value="test"><br/>
    a.<input type="radio" name="rd" value="a"><br/>
    b.<input type="radio" name="rd" value="b"><br/>
    c.<input type="radio" name="rd" value="c"><br/>
    <input type="submit" value="submit">
</form>

我的 $_POST 将包含以下值:

Array
(
    [textbox] => test
    [rd] => a
)

如果我尝试遍历我的数组,我会这样做:

for ($_POST as $key->$value) 
    echo $key . " = " . $value . "\n";

这会给我以下输出:

textbox = test
rd = a

您能告诉我您要解决什么问题吗,因为您似乎是从其他语言或框架的角度来解决这个问题的,或者您可能希望在 PHP 中使用其他一些不是$_POST?

【讨论】:

谢谢基思,我明白了。对于您示例中的两个值中的每一个,我想传递/关联一个 inputid(来自 db 的 id)和 inputoutputtype(文本、收音机等)。问题是初始表单是由用户生成的,因此它可以包含多种类型的多个输入字段。我正在尝试构建一个 php 处理程序,即使我不知道输入元素的名称(生成名称),它也会读取 $_POST 并找到所有不同的值(与 inputid 和 inputoutputtype 相关联),然后编写数据库中的值(及其类型)(指向正确的输入 id)。 我可以看到两种处理方法之一。第一,为每个实际字段包含一个隐藏字段,但在名称前添加一些内容以便可以将其过滤掉(或者,可以将一个带有 JSON 或其他相同数据列表的隐藏字段用于所有表单数据)。其次,您可以读取和解析包含表单的页面并检查表单和元素。这两种方法中的任何一种都可以让您创建一个包含所有字段、它们的类型、它们的 id 和值的多维列表。 感谢@keith-rockhold,我试图理解并找到示例,但这超出了我对 php 的了解。我什至不确定要寻找什么。我已经在那里更新了我的问题。我正在尝试将 3 个值组合为一个(可能是数组?)并让我的表单处理程序了解发生了什么,即使处理程序不知道名称。 为什么不对所有数据使用名称字段,用 _ 或其他字符分隔。所以你的 最终会是 ?然后您可以简单地遍历 $_POST 数组,展开名称字段以获得您需要的所有不同的数组值。

以上是关于Foreach $_POST - 如何增加指向下一个元素的数组指针的主要内容,如果未能解决你的问题,请参考以下文章

Laravel foreach 每个项目增加 3

HTML foreach $ _POST

如何将数据库表中的一个值和 $_POST 中的另一个值插入另一个数据库表[重复]

PHP - 提交日期/时间/从foreach循环中选择输入值到$ _POST不返回任何内容

无法使用 post 请求进入下一页

打印 $_POST 变量名和值