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 - 如何增加指向下一个元素的数组指针的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据库表中的一个值和 $_POST 中的另一个值插入另一个数据库表[重复]