2014-04-01 32 views
1

我正在编写一个PHP函数,并且我想问一个问题。我以特定方式爆炸字符串时遇到问题。我试图解释,以及我可以下面。将字符串转换为具有键和值的多维数组

这是什么?

嗯..我正在努力减少我的网站上的表的数量的解决方案。我可以将用于管理员权限的表转换为用户表中的一个字段。但是,当加载网站时,我需要将文本字段分解为数组。该代码看起来像:

<?php 
$string = "server1=(ban=(perm=false,normal=true),edit=true,delete=false),adminlog=true,server2=(ban=(perm=false,normal=true),edit=false,delete=true)"; 

function parseRights($s=""){ 
$context = array(); 

// code here 
} 

print_r(parseRights($string)); 
?> 

基本上,我希望得到的结果是:

Array 
(
    [server1] => Array 
     (
      [ban] => Array 
       (
        [perm] => false 
        [normal] => true 
       ) 

      [edit] => true 
      [delete] => false 
     ) 

    [adminlog] => true 
    [server2] => Array 
     (
      [ban] => Array 
       (
        [perm] => false 
        [normal] => false 
       ) 

      [edit] => false 
      [delete] => true 
     ) 

) 

真假应该是PHP真假。如果以这种方式写出来,我知道它会显示1表示真正的位置,并且没有0表示0,但它只是为了向您展示我希望数组在运行该函数后的样子。我希望它能够创建一个“无限”数组,每个新的括号创建一个新的数组。如果函数能以相同的方式工作,我会很乐意接受其他方法来区分正确的权利。

+1

为什么你首先使用这样的字符串呢?你可以从数组或JSON开始。 – AbraCadaver

+0

它将连接到数据库并从用户表中获取字符串...这只是由于测试目的..我还没有连接到数据库。我想检查是否可以将它分解为多维数组。我想在一个函数内部使用这个函数,在我想要的网站上。 – Teskon

+1

可以但为什么它是复杂的方式。可以将它存储在数据库的关系结构中,或者不要在数据库中存储序列化数组,然后将其转换回数组。 – AbraCadaver

回答

1

只是为了帮助你一点。更好的办法是拥有存储每个功能块的相关表,例如禁止表和权限表都与服务器表或类似的表有关。如果你不打算在数据库中妥善保管此,至少节省一些麻烦:

$array = array('server1'=>array('ban'=>array('perm'=>false,'normal'=>true),'edit'=>true,'delete'=>false)); 

$string = json_encode($array); 
echo $string; 
/* 
{"server1":{"ban":{"perm":false,"normal":true},"edit":true,"delete":false}} 
*/ 
$new_array = json_decode($string, true); 
var_export($new_array); 
/* 
array 
(
    'server1' => 
    array (
    'ban' => 
    array (
     'perm' => false, 
     'normal' => true, 
    ), 
    'edit' => true, 
    'delete' => false, 
), 
) 
*/ 

见JSON字符串的外观极其相似你的字符串?你也可以使用serialize(),但JSON是标准化和便携的。

此外,var_dump()var_export()将显示truefalse实际存储,print_r()只是没有显示正确的类型。