如何通过指定包含层次结构的键来创建数组项?

时间:2010-04-15 06:46:38

标签: php arrays

原始代码为:

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]
                  )
)

我怎么能这样做?     ...

2 个答案:

答案 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;');