在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函数的简单解决方案。
谢谢你,帮助我。
答案 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));
}