按键字符串分组数组值?

时间:2015-05-25 00:19:59

标签: php arrays regex

好的,给出了这个数据结构:

array(
         'name one' => 'fred',
         'desc one' => 'lorem ipsum'
         'name two' => 'charles',
         'desc two' => 'lorem ipsum'
);

在php中我如何匹配分配给键ONE或TWO的数值并返回:

array(
           'one' => array('name' => 'fred', 'desc' => 'lorem ipsum'),
           'two' => array('name' => 'charles' , 'desc => 'lorem ipsum')
);

2 个答案:

答案 0 :(得分:5)

这是一个直接的逻辑问题,这就是你如何做到的( 我确信有一个更快的选择,但这完全符合你的需要 ):

$new = array();
foreach($array as $key => $val) {
    list($item, $number) = explode(' ', $key);
    $new[$number][$item] = $val;
}

我们在上面的示例中使用list()explode()来获取所需的变量。即数字“一”或“两”和项目名称,基本上是“名称”和“desc”。

Example

修改

正如Lajos所说,如果未设置$new[$number],此版本将对其进行排序并创建所需的数组:

$new = array();
foreach($array as $key => $val) {
    list($item, $number) = explode(' ', $key);
    // if the array isn't set
    if(!isset($new[$number])) $new[$number] = array();
    $new[$number][$item] = $val;
}

Example

答案 1 :(得分:3)

这样的事情:

$target = array();
foreach ($elements as $k => $v) {
    $keys = explode(" ", $k);
    if (!isset($target[$keys[1]])) {
        $target[$keys[1]] = array();
    }
    $target[$keys[1]][$keys[0]] = $v;
}