2012-12-13 59 views
3

好吧,我正在爲我的僱主建立一些東西讓他們輸入產品,他們有非常具體的要求。我有一個像這樣動態生成的字段的表格... (顯然不是確切的代碼遵循但實例概念相同)獲取當前數組密鑰在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寬度值

而是它輸出

 高度值
 寬度值

什麼是布萊恩g on?我有類似的...但稍有不同,因爲定義的數字可以有多個輸入....這完美地工作。

<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

我不明白爲什麼更復雜的一個工作和簡單的一個沒有按我沒有明顯的東西嗎?我知道我有一些比較有些非正統的編碼方法,但這是它的大聲笑。任何幫助將不勝感激。

編輯:如請求

陣列(22){[ 「PID」=>串(12) 「測試產品」[ 「pPrice」] =>串(0) 「」[「PNAME瓦爾轉儲(0)「] => string(0)」「[」pRRP「] => string(0)」「[」pPostSize「] => string(0)」「[」pOurPrice「] => string(0) 「pEstDelivery」] => string(0)「」[「pWeight」] => string(0)「」[「pEAN」] => string(0)「」[「pOrder」] => string(0)「 「[」pStock「] => string(0)」「[」pManufacturer「] => string(0)」「[」pType「] => string(13)」Shower Valves「[」pRange「] => string (0)「」[「cat」] => array(2){[0] => string(2)「72」[1] => string(2)「23」} [「attribute」] => array (2){[] =>字符串(5)「寬度「[1] => string(6)」height「} [」option「] => array(3){[0] => array(1){[] => string(6)」 works1 「} [1] =>數組(1){[] =>串(6)」 works1「} [2] =>數組(1){[] =>串(6)「works2」}} [「pLongdescription」] => string(0)「」[「meta_description」] => string(0)「」[「meta_keyword」] => string(0)「」[ 「meta_title」] => string(0)「」[「action」] => string(6)「create」}

粗體部分,是我的第二個示例中成功出現的部分。但是您可以看到的粗體斜體返回0,而不是實際在表單名稱值中的20。

+0

小心格式化您的轉儲一點?這是不可讀的! (插入一些輸入,縮進子陣列等) – Veger

+0

沒有必要,由於從吉姆和你自己得到的提示,工作得很好,儘管你的語調居高臨下。但是,謝謝你。 – GestaltO

+0

很高興我們可以幫你讓你更好地理解它! – Veger

回答

10
<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()嘗試:

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

不幸的是,不幸的是,我早些時候曾嘗試過類似的事情,並且現在再次犯了類似的錯誤。輸出... 0值
值1 ...而不是.... 20值
27值 :( – GestaltO

+0

能告訴你的'$ _POST'一個的var_dump? – Jim

+0

添加 – GestaltO

1

按照PHP documentation of 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關於此使用的詳細信息。

+0

Nope,輸出0 value1 0 value2。如上所述,我在第二個例子中使用了key(),它完美地工作?!非常混亂。 – GestaltO

+0

你的第二個例子是偶然的,可能是因爲你在你的第二個'foreach'循環中使用了'$ options'數組......正如文檔中所述,你需要提供* array *作爲key() '參數,並提供數組*值*作爲參數。 – Veger

+0

但我試過了,它仍然沒有做我想要的哈哈。第二個例子可能是偶然的工作,但它確實是我想要的;) – GestaltO

1

好吧,我已經修復了它,在你們的幫助下,我意識到我有點愚蠢,只編輯表單的靜態部分來合併動態鍵,而不是覆蓋Ajax的部分它。

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

完美地工作。謝謝提醒夥計。