В последнее время я много работал с формами и решил создать 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
(
[forms] => Array
(
[image] => Array
(
[0] =>
[8] =>
[1] =>
[9] =>
)
)
)
проблема здесь в том, что если вы добавляете «изображение» в качестве $ name, то оно должно быть добавлено в массив, как если бы он был опубликован, поэтому это будет массив (image => data), если вы введете изображение [], тогда это будет массив (image => array (0 => data)).
Я считаю, что мой код слишком громоздкий, я нашел parse_str , который анализирует "image []", но это не помогло мне, так как мне нужно, чтобы имена добавлялись отдельно ...
Можно ли сделать эту функцию более элегантной?
пояснение:
Есть ли лучший способ добавить «имя []» в массив, как если бы он был частью списка имен, добавляемых в массив.
, поэтому мне нужна замена parse_str, которая не перезаписывает массив $.
Пример: * +1021 *
$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
)
)
Это действительно упростит вышеуказанную функцию!