私は最近フォームで多くの作業を行っており、自分自身が繰り返し見ているいくつかの側面を単純化するために php スクリプトを作成することにしました。可能であれば、次のコード:
function add($name,$input,&$array)
{
$p = explode('[',$name);
if(isset($p[1]))
{
list($key) = explode(']',$p[1]);
if(ctype_digit($key))
{
$array['forms'][$p[0]][$key] = $input;
}else{
$array['forms'][$p[0]][] = $input;
}
}else{
$array['forms'][$name] = $input;
}
}
$array = array();
add('image[]','',$array);
add('image[8]','',$array);
add('image[1]','',$array);
add('image[]','',$array);
echo '<PLAINTEXT>';
print_r($array);
$array を次のようにします。
Array
(
[forms] => Array
(
[image] => Array
(
[0] =>
[8] =>
[1] =>
[9] =>
)
)
)
ここでの問題は、$name として「画像」を追加する場合、Posted されたかのように配列に追加する必要があるため、image[] を入力すると配列 (image=>data) になることです。それはarray(image=>array(0=>data))になります。
コードが大きすぎることがわかりました。「image[]」を解析するparse_strを見つけましたが、名前を個別に追加する必要があるため、役に立ちませんでした...
この関数をよりエレガントにすることはできますか?
説明:
配列に追加する名前のリストの一部であるかのように、「name[]」を配列に追加するより良い方法はありますか。
そのため、$array を上書きしない parse_str の置換が必要です。例:
$array = array();
parse_str('image[]=test',$array);
parse_str('image[]=test1',$array);
parse_str('image[]=test2',$array);
しかし、結果は次のようになります。
Array
(
[image] => Array
(
[0] => test2
)
)
しかし、次のようにする必要があります:
Array
(
[image] => Array
(
[0] => test
[1] => test1
[2] => test2
)
)
これにより、上記の関数が本当に単純化されます。