Php 获取foreach中的当前数组键

Php 获取foreach中的当前数组键,php,arrays,forms,foreach,Php,Arrays,Forms,Foreach,好的,我正在为我的雇主做一些东西,让他们输入产品,他们有非常具体的要求。我有一个动态生成字段的表单,如下所示。。。 (显然不是要遵循的确切代码,但示例在概念上是相同的) 输入值=高度 输入值=宽度 这些数字是根据数据库中的内容生成的,因此20与“宽度”相关,27与“高度”相关 所以,一旦用户输入了这些值,我需要这些值进入数据库…或者在测试中,回显 foreach ($_POST['attribute'] as $attributes){ echo key($attributes).' '.$a

好的,我正在为我的雇主做一些东西,让他们输入产品,他们有非常具体的要求。我有一个动态生成字段的表单,如下所示。。。 (显然不是要遵循的确切代码,但示例在概念上是相同的)

输入值=高度
输入值=宽度
这些数字是根据数据库中的内容生成的,因此20与“宽度”相关,27与“高度”相关

所以,一旦用户输入了这些值,我需要这些值进入数据库…或者在测试中,回显

foreach ($_POST['attribute'] as $attributes){
echo key($attributes).' '.$attributes.'<br>';
}
foreach($\u POST['attribute']作为$attributes){
回显键($attributes)。'.$attributes.'
'; }
所以应该输出

20 height value<br>
27 width value
20高度值
27宽度值
但相反,它输出

&nbsp;height value<br>
&nbsp;width value
高度值
宽度值
发生了什么事?我有一些类似的东西…但有点不同,因为定义的数字可以有多个输入…这非常好

<input type="text" name="option[][20]"> inputted value = option 1
<input type="text" name="option[][20]"> inputted value = option 2
<input type="text" name="option[][27]"> inputted value = option 1

foreach ($_POST['option'] as $options){
echo key($options).' ';
foreach ($options as $option){
echo $option.'<br>';
}
输入值=选项1
输入值=选项2
输入值=选项1
foreach($_POST['option']作为$options){
回声键($选项)。“”;
foreach($options作为$option){
echo$选项。“
”; }
输出完美

20 option 1<br>
20 option 2<br>
27 option 1
20选项1
20选项2
27备选案文1
我不明白为什么更复杂的方法有效,而简单的方法无效,我是否遗漏了一些明显的东西?我知道我有一种与某些方法相比有点非正统的编码方法,但这就是lol。任何帮助都将不胜感激

编辑:根据请求进行Var转储

数组(22){“pID”=>string(12)“测试产品”[“pPrice”]=>string(0)”“[“pName”]=>string(0)”“[“pRRP”]=>string(0)”“[“pOurPrice”]=>string(0)”[“pEstDelivery”]=>string(0)”“[“pWeight”=>string(0)”“[“pEAN”]=>string(0)”“pOrder”=>string(0)”“[“pOrder”=>string(0)”[“pOrder”=>string(0)”[“Porpstock”]=>string(0)”[“Peaturer”=>string(0)”“[“pType”]=>string(13)”淋浴阀“[“pRange”=>string(0)””[“cat”=>array(2){[0]=>string(2)“72”[1]=>string(2)”23}[“attribute”=>array(2){[0]=>string(5)width“[1]=>string(6)“height”[“option”=>array(3){[0]=>array(1)[1] =>数组(1){[10]=>string(6)“works1”}[2]=>array(1){[10]=>string(6)works2”}[“pLongdescription”]=>string(0)[“元描述”]=>string(0)”[“元关键词”]=>string(0)”[“元标题”=>string(0)”[“动作”=>string(6)“创建”}

粗体部分是在我的第二个示例中成功出现的部分。但正如您所看到的,粗体斜体部分返回0,而不是表单名称值中的20。

根据PHP:

<input type="text" name="attribute[20]"> inputted value = height
<input type="text" name="attribute[27]"> inputted value = width

foreach ($_POST['attribute'] as $attributes){
    echo key($attributes).' '.$attributes.'<br>';
}
key()函数只返回内部指针当前指向的数组元素的键。它不会以任何方式移动指针。如果内部指针指向元素列表的末尾之外或数组为空,key()返回NULL

文档(和示例)显示,您需要提供实际数组作为参数,其中使用的是值

因此,请使用类似这样的方法:

$yourArray = $_POST['attribute'];
foreach ($yourArray as $attributes){
  echo key($yourArray).' '.$attributes.'<br>';
}
因为
key()
方法在我看来有点“不可靠”(依赖于内部指针)


查看以了解有关此用法的更多信息。

好吧,我已经修复了它,在你们的帮助下,我意识到我有点愚蠢,只编辑表单的静态部分以合并动态键,而不是ajax生成的覆盖它的部分

foreach ($_POST['attribute'] as $key => $attributes){
echo $key.'+'.$attributes.'<br>';
}
foreach($\u POST['attribute']作为$key=>$attributes){
回显$key.'+.$attributes.'
'; }

非常好。谢谢大家的提示。

不,不幸的是没有,我早些时候尝试过类似的方法,现在又尝试了一次,以防我早些时候做错了什么。它输出…0值
1值…而不是…20值
27值:(不,它输出0值1 0值2。如前所述,我使用key()在我的第二个示例中,它工作得很好?!非常混乱。您的第二个示例工作得很偶然,可能是因为您在第二个
foreach
-loop…:)中使用了
$options
数组,正如文档中所述,您需要将数组作为
键()提供
parameter,您提供数组值作为参数。但是我试过了,它仍然没有达到我想要的效果。lol。第二个例子,可能是偶然发生的,但它确实达到了我想要的效果;)echo键($options)在第二个“工作”示例中,应该显示第一个数组维度的键。这些键没有设置,应该返回空值。相反,它们幸运地显示了2d数组的第二个维度的值,因为您在第二个
foreach
循环中使用了
$options
。如果您对这个结果感到满意,请稍后再试st.:)但不要期望这种类型的“运气”适用于您的第一个代码示例!啊,我明白您的意思。我实际上尝试了使用2d方法来模拟工作示例,它完全按照您所描述的做,返回空值。是否要格式化转储文件?它不可读!(插入一些输入、缩进子数组等)不需要,感谢Jim和你自己的提示,尽管你的语气有些傲慢。但还是谢谢你。很高兴我们能帮助你更好地理解它!
$yourArray = $_POST['attribute'];
foreach ($yourArray as $attributes){
  echo key($yourArray).' '.$attributes.'<br>';
}
foreach ($_POST['attribute'] as $attributeKey => $attributes){
    echo $attributeKey.' '.$attributes.'<br>';
}
foreach ($_POST['attribute'] as $key => $attributes){
echo $key.'+'.$attributes.'<br>';
}