内爆后爆炸

时间:2012-05-17 07:23:24

标签: php

我有这个数组,我试图以同样的方式返回它。

示例:

        $this->permission_array = array(
                                    'orders'                => 1,
                                    'orders_Status'         => 0,
                                    'schools'               => 0,
                                    'accommodation'         => 0,
                                    'users'                 => 1,
                                    'news'                  => 0,
                                    'blocks'                => 1,
                                    'settings'              => 0,
                                    'videos'                => 1,
                                    );
内爆后将其插入到数据库中就变成了这样。

USER_ID     USER_NAME           USER_PERMISSION
---------------------------------------------------
  1302       Othman             1,0,0,0,1,0,1,0,1

现在,如果我使用 explode ,它将作为数组返回,但键不一样。我如何将这些值传递给相同的数组,而不是像这个数组:

[0] => 1
[1] => 0
[2] => 0
[3] => 0
[4] => 1
[5] => 0
[6] => 1
[7] => 0
[8] => 1  

是否有将最后一个数组再次更改为第一个数组?提前致谢。

My Desision将更改数据库字段并创建新表。谢谢你们

6 个答案:

答案 0 :(得分:1)

implode函数只关心值。

您可以使用implodeexplode来使用json作为保存格式,而不是使用json_encodejson_decode。这将是您的关键信息。

但真正的问题是你的数据库设计。

答案 1 :(得分:1)

创建一个user_permissions表:

permission_id    permission_name

然后创建一个users_2_permissions表

user_id          permission_id

当您想要恢复数组时,您将对用户,users_2_permissions和user_permissions执行JOIN

答案 2 :(得分:0)

使用serialize()在数据库中存储数组。

答案 3 :(得分:0)

您可以为此创建另一个表,例如USER_PERMISSIONS(id,user_id,orders,orders_Status,...),其中id是主键,user_id是USERS表的外键,所有其他字段包含值各自的权限。这种方法可以为查询增加更多的复杂性,但它仍然比将arrat序列化为字符串更好。

答案 4 :(得分:0)

简单......

    $a=explode(',',$permitions_from_database);
    $names=array('orders','orders_Status','etc','etc')

    $i=0;
    foreach($names as $name)
    {
    $permission_array[$name]=$a[$i];
    $i++;
    }

但我认为你应该把数据放在不同的列上,最好是查询数据库中谁拥有某些权限,而不是将所有数据都带到php然后处理它。

我希望它有所帮助:)

答案 5 :(得分:0)

不是暗示,你需要规范化,将值作为一个整数字符串存储在双引号“”中,以防它影响你的数据库而不需要重构数据库。