获取foreach中的当前数组键

时间:2012-12-13 00:14:11

标签: php arrays forms foreach

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

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

数字是根据数据库中的内容生成的,因此20与“宽度”27相关,例如与“高度”相关。

因此,一旦用户输入值,我需要将这些值放入数据库......或者在测试中,回显出来。

foreach ($_POST['attribute'] as $attributes){
echo key($attributes).' '.$attributes.'<br>';
}

那应该输出......

20高度值
27宽度值

但是输出

身高值
宽度值

发生了什么事?我有类似的东西...但略有不同,因为定义的数字可以有多个输入....这是完美的。

<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>';
}

输出完美......

20选项1
20选项2
27选项1

我不明白为什么更复杂的一个工作而更简单的工作没有,我错过了一些明显的东西?我知道我有一些非正统的编码方法与一些相比,但它是什么,大声笑。任何帮助将不胜感激。

编辑:按要求进行Var转储

array(22){[“pID”] =&gt; string(12)“test product”[“pPrice”] =&gt; string(0)“”[“pName”] =&gt; string(0)“”[“pRRP”] =&gt; string(0)“”[“pPostSize”] =&gt; string(0)“”[“pOurPrice”] =&gt; string(0)“”[“pEstDelivery”] =&gt; string(0)“”[“pWeight”] =&gt; string(0)“”[“pEAN”] =&gt; string(0)“”[“pOrder”] =&gt; string(0)“”[“pStock”] =&gt; string(0)“”[“pManufacturer”] =&gt; string(0)“”[“pType”] =&gt; string(13)“Shower Valves”[“pRange”] =&gt; string(0)“”[“cat”] =&gt; array(2){[0] =&gt; string(2)“72”[1] =&gt; string(2)“23”} [“attribute”] =&gt; array(2){[ 0 ] =&gt; string(5)“ width ”[1] =&gt; string(6)“height”} [“option”] =&gt; array(3){[0] =&gt; array(1){[ 11 ] =&gt; string(6)“ works1 ”} [1] =&gt; array(1){[ 10 ] =&gt; string(6)“ works1 ”} [2] =&gt; array(1){[ 10 ] =&gt; string(6)“ works2 ”}} [“pLongdescription”] =&gt; string(0)“”[“meta_description”] =&gt; string(0)“”[“meta_keyword”] =&gt; string(0)“”[“meta_title”] =&gt; string(0)“”[“action”] =&gt; string(6)“create”}

粗体部分是我在第二个例子中成功出现的部分。但是你可以看到粗体斜体,返回0而不是实际在表单名称值中的20。

3 个答案:

答案 0 :(得分:12)

<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>';
}

请注意,您在post中循环遍历属性数组。 $ attributes是每个字段的值(因此不是数组。

而不是使用key()尝试:

foreach ($_POST['attribute'] as $attributeKey => $attributes){
    echo $attributeKey.' '.$attributes.'<br>';
}

答案 1 :(得分:2)

根据PHP documentation of key()

  

key()函数只返回内部指针当前指向的数组元素的键。它不会以任何方式移动指针。如果内部指针指向元素列表的末尾或数组为空,键()将返回 NULL

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

所以使用这样的东西:

$yourArray = $_POST['attribute'];
foreach ($yourArray as $attributes){
  echo key($yourArray).' '.$attributes.'<br>';
}

即使你注意到你已经意识到你有一种“有些非正统的编码方法”,但以这种方式使用foreach - 循环会好得多:

foreach ($_POST['attribute'] as $attributeKey => $attributes){
    echo $attributeKey.' '.$attributes.'<br>';
}

因为key()方法对我来说似乎有点'狡猾'(依赖于内部指针)。

有关此用途的详细信息,请查看foreach documentation

答案 2 :(得分:2)

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

foreach ($_POST['attribute'] as $key => $attributes){
echo $key.'+'.$attributes.'<br>';
}

完美无缺。感谢提示家伙。