php:转换从表单获取的数组

时间:2014-07-21 21:31:07

标签: php arrays

在PHP中,我有一个结构如下的数组:

Array
(
    [nom-1] => martin
    [prenom-1] => bidule
    [date-1] => 1961-01-10
    [nom-2] => dupont
    [prenom-2] => machin
    [date-2] => 1972-02-20
    [nom-7] => durand
    [prenom-7] => truc
    [date-7] => 1983-03-30
    ...
)

我会得到这个:

Array
(
    [1] => array ( [nom] => martin
                   [prenom] => bidule
                   [date] => 1961-01-10
                 )
    [2] => array ( [nom] => dupont
                   [prenom] => machin
                   [date] => 1972-02-20
                 )
    [7] => array ( [nom] => durand
                   [prenom] => truc
                   [date] => 1983-03-30
                 )
    ...
)

我认为可能有一个我不知道的PHP函数的简单解决方案。

谢谢你,帮助我。

3 个答案:

答案 0 :(得分:0)

这样就可以了。

$newArr = array();
foreach($arr as $key => $value) {
    if(preg_match('/^[a-z]+?-\d+?$/', $key)) {
        preg_match('/^([a-z]+?)-(\d+?)$/', $key, $match);
        $n = (int)$match[2];
        if(!isset($newArr[$n])) {
            $newArr[$n] = array();
        }
        $newArr[$n][$match[1]] = $value;
    }
}
print_r($newArr);

但是我会在输入中使用nom[]prenom[]date[]作为名称,然后在$_POST变量中获取一个数组,用于输入多个输入同名。

答案 1 :(得分:0)

这是另一个:

$a=array
(
    'nom-1' => 'martin',
    'prenom-1' => 'bidule',
    'date-1' => '1961-01-10'

    );
// function refactor($a){
    $output=array();
 foreach ($a as $key => $value) {
     $keyData=explode("-", $key);
     $output[$keyData[1]][$keyData[0]]=$value;
 }
 print_r($output);

答案 2 :(得分:0)

没有正则表达式。

$array = Array(
    'nom-1' => 'martin',
    'prenom-1' => 'bidule',
    'date-1' => '1961-01-10',
    'nom-2' => 'dupont',
    'prenom-2' => 'machin',
    'date-2' => '1972-02-20',
    'nom-7' => 'durand',
    'prenom-7' => 'truc',
    'date-7' => '1983-03-30'
);

$newArray = array();

foreach ($array as $key => $value)
{
    $num = substr($key, strpos($key, '-')+1);
    if (!isset($newArray[$num]))
        $newArray[$num] = array();

    array_push($newArray[$num], array(substr($key, 0, strpos($key, '-')) => $value));
}