4

さて、私は雇用主が製品を入力できるように何かを構築しています。彼らには非常に具体的な要件があります。私はそのような動的に生成されたフィールドを持つフォームを持っています...(明らかに従うべき正確なコードではありませんが、例は概念的に同じです)

<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 height value<br>
27 width value

代わりに出力します

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

完璧に出力します...

20 option 1<br>
20 option 2<br>
27 option 1

より複雑なものが機能し、単純なものが機能しない理由がわかりません。明らかな何かが欠けているのでしょうか。いくつかと比べると、やや異例のコーディング方法があることは承知していますが、それが大爆笑です。どんな助けでも大歓迎です。

編集:要求に応じてVarダンプ

array(22){["pID"] => string(12) "test product" ["pPrice"] => string(0) "" ["pName"] => 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){[ 0 ] => string(5)" width "[1] => string(6)" height "} ["option "] => array(3){[0] => array(1){[ 11 ] => string(6) " works1 "} [1] => array(1){[ 10 ] => string(6) " works1 "} [2] => array( 1){[10 ] => string(6) " works2 "}} ["pLongdescription"] => string(0) "" ["meta_description"] => string(0) "" ["meta_keyword"] => string(0) "" ["meta_title"] => string(0) "" ["action"] => string(6) "create"}

太字の部分は、私の2番目の例でうまく出てきた部分です。ただし、ご覧のとおり、太字のイタリックは、実際にはフォーム名の値にある20ではなく0を返します。

4

3 に答える 3

13
<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()tryを使用する代わりに:

foreach ($_POST['attribute'] as $attributeKey => $attributes){
    echo $attributeKey.' '.$attributes.'<br>';
}
于 2012-12-13T00:20:32.960 に答える
2

さて、皆さんの助けを借りて、私は少し愚かで、フォームの静的な部分だけを編集して動的なキーを組み込み、それを上書きするajaxで生成された部分は組み込まないことに気づき、修正しました。

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

完璧に動作します。ヒントの人に感謝します。

于 2012-12-13T01:28:39.987 に答える
2

key()のPHPドキュメントによると:

key()関数は、内部ポインタが現在指している配列要素のキーを返すだけです。ポインタは移動しません。内部ポインタが要素リストの終わりを超えている場合、または配列が空の場合、key()はNULLを返します。

ドキュメント(および例)には、値を使用している場所で、実際の配列をパラメーターとして指定する必要があることが示されています。

したがって、次のようなものを使用します。

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

「いくつかと比較して、やや非正統的なコーディング方法」があることに気付いたとしてもforeach、このように-loopを使用する方がはるかに良いでしょう。

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

メソッドは私には少し「危険」に見えるのでkey()(内部ポインタに依存している)。

この使用法の詳細については、 foreachのドキュメントを確認してください。

于 2012-12-13T00:22:15.880 に答える