原始代码为:
foreach($option as $name=>$value)
$array[$name] = $value;
和$ name as
button[0][text], button[0][value], button[1][text], spider[0][name], ...
结果数组将是
array('button[0][text]' => 'its text',
'button[0][value]' => 'its value',
'button[1][text]' => 'its text',
'spider[0][name]' => 'its name',
)
然而,我想要的是
array('button' => array( array('text'=>'its text', 'value'=>'its value'), // this is $array[button][0]
array('text'=>'its text') // this is $array[button][1]
),
'spider' => array( array('name'=>'its name') // this is $array[spider][0]
)
)
我怎么能这样做? ...
答案 0 :(得分:1)
看起来不那么糟糕,但你应该避免使用eval。通过将所有键与preg_match匹配轻松实现。
if(preg_match('/^\w+?[(\d+?)][(\w+?)]$/', $name, $matches)) {
$myarray[$matches[1]][$matches[2]][$matches[3]] = $value;
未经测试,但我相信你会明白这一点。
答案 1 :(得分:0)
我自己刚刚制定了一个解决方案,但仍希望看到其他解决方案。为了您的有趣,请在此处粘贴我的解决方案:
if(preg_match('/^([^\[\]]+)(\[.+\])$/', $name, $matches)) {
eval('$myarray[$matches[1]]'. $matches[2]. ' = $value;');