好的,我正在为我的雇主建立一些东西供他们输入产品,他们有非常具体的要求。我有一个动态生成字段的表单,如此... (显然不是要遵循的确切代码,但实例在概念上是相同的)
<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。
答案 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>';
}
完美无缺。感谢提示家伙。