0

これは私の配列です

$array = array('foo' => 'bar', 'baz', 'bat' => 2);



<form method='POST' action='test.php' onsubmit='return validateForm()' >
echo '<input type="hidden" name="array" value= "'.implode(',', $array).'">';
echo "<<input type='submit' name='Submit'  value='submit' />";
echo '</form>';


$arry = explode(',', $_POST['array']);

としてキーを取得しています0,1,2。「foo」、「baz」、「bat」のいずれかです。

どうすれば正しいキーを取得できますか?

4

5 に答える 5

1

私が正しい場合は、配列値を内破してフォームを投稿した後に配列キーが必要です。

json_encode良い解決策だと思います。別のソリューションを追加しています。

配列値を持つ配列キーを投稿する別の隠し要素を追加します。

echo '<input type="hidden" name="values" value= "'.implode(',', array_values($array)).'">';
echo '<input type="hidden" name="keys" value= "'.implode(',', array_keys($array)).'">';

あなたのtest.php

$arrayValues = explode(',', $_POST['values']);
$arrayKeys = explode(',', $_POST['keys']);

$yourFinalArray = array_combine($arrayKeys, $arrayValues);
于 2013-06-11T11:14:00.170 に答える
0

配列をエンコードし、json_encode関数などを使用してデコードしjson_decodeます。

関数implodeは配列キーを無視しています。

于 2013-06-11T10:51:55.950 に答える
0

フォーム送信で配列を次のように送信できます

page1.php

$array = array('foo' => 'bar', 'baz', 'bat' => 2);

echo "<form method='POST' action='page2.php' onsubmit='return validateForm()' >";
foreach($array as $key=>$value) {
echo '<input type="hidden" name="array[]" value = "'.$key."|".$value.'">';
}
echo "<input type='submit' name='Submit' value='submit' />";
echo '</form>';
?>

page2.php

<?php
$array = array();
foreach($_POST['array'] as $value) {
    $a = explode("|",$value);   
    $array[$a[0]] = $a[1];
}
print_r($array);
?>

出力:

Array
(
    [foo] => bar
    [0] => baz
    [bat] => 2
)
于 2013-09-23T07:14:57.023 に答える
0
于 2013-06-11T11:46:30.907 に答える
0

実際には何か問題があります。Yuo は配列を爆発させていますが、あなたはそれを内破する必要があります。bazまた、値なのでキーとして取得することはできません。キーは実際には 0 です。このサンプルを見てください。

$array = array('foo' => 'bar', 'baz', 'bat' => 2);
$arry = implode(',', $array_key($array));
echo $arra;

これにより、配列のキーがカンマ区切りの値リストに変換されます

foo,0,bat

ライブサンプル

逆に、投稿配列から値を取得する場合は、次のようになります

$array = array('foo' => 'bar', 'baz', 'bat' => 2);
$arry = implode(',', $array_values($array));
echo $arra;

出力

bar,baz,2
  //^ as you can see baz it's between values

ライブサンプル

于 2013-06-11T10:54:01.117 に答える