将数组键转换为多维数组

5

我有一个如下所示的数组

$db_resources = array('till' => array(
 'left.btn' => 'Left button',
 'left.text' => 'Left text',
 'left.input.text' => 'Left input text',
 'left.input.checkbox' => 'Left input checkbox'        
));

我需要动态地将这个数组转换为以下形式。
'till' => array(
    'left' => array(
        'btn' => 'Left button',
        'text' => 'Left text',
        'input' => array(
            'text' => 'Left input text',
            'checkbox' => 'Left input checkbox'
        )
    )
  )

我尝试了使用explode函数对键进行处理。如果所有的键都只有一个“.”,那么这个方法是有效的。但是键是动态的,所以请帮我实现动态转换数组。我尝试了以下代码:

$label_array = array();
foreach($db_resources as $keey => $db_resources2){
    if (strpos($keey,'.') !== false) {  
        $array_key = explode('.',$keey);    
        $frst_key = array_shift($array_key);
        if(count($array_key) > 1){  
            $label_array[$frst_key][implode('.',$array_key)] = $db_resources2;
            //Need to change here
        }else{
            $label_array[$frst_key][implode('.',$array_key)] = $db_resources2;
        }
    }   
}

你尝试过什么了吗?也请贴出你的尝试内容。 - Narendrasingh Sisodia
@Uchiha - 我编辑了问题,并在此更新了我的代码。 - Jegan
使用for_each$array_key,因为explode返回一个数组。 - Sayed
@phplover 无法理解您的评论。 - Jegan
我接受它作为一项艰巨的任务...... 我正在努力工作 ;P - Umair Ayub
1个回答

1

可能有更加优雅的方法,但这里提供了一个使用递归辅助函数完成的示例:

    function generateNew($array, $keys, $currentIndex, $value)
    {
        if ($currentIndex == count($keys) - 1)
        {
            $array[$keys[$currentIndex]] = $value;
        }
        else
        {
            if (!isset($array[$keys[$currentIndex]]))
            {
                $array[$keys[$currentIndex]] = array();
            }

            $array[$keys[$currentIndex]] = generateNew($array[$keys[$currentIndex]], $keys, $currentIndex + 1, $value);
        }

        return $array;
    }

    $result = array();
    // $temp equals your original value array here...
    foreach ($temp as $combinedKey => $value)
    {
        $result = generateNew($result, explode(".", $combinedKey), 0, $value);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接