我正在制作一些权限模块,为此,我将所有数据作为序列化数组进行处理。当我尝试使用反序列化显示它时,内部数组显示为null
。我认为它不是一个精确的阵列。请帮我解决一些问题。
这是使用
的代码$serialisedString = 'a:3:{i:1;a:2:{s:14:"'permissionId'";s:1:"1";s:13:"'permissions'";a:3:{s:6:"'view'";s:1:"1";s:6:"'edit'";s:1:"1";s:8:"'delete'";s:1:"0";}}i:2;a:2:{s:14:"'permissionId'";s:1:"2";s:13:"'permissions'";a:3:{s:6:"'view'";s:1:"1";s:6:"'edit'";s:1:"1";s:8:"'delete'";s:1:"0";}}i:3;a:2:{s:14:"'permissionId'";s:1:"3";s:13:"'permissions'";a:3:{s:6:"'view'";s:1:"1";s:6:"'edit'";s:1:"1";s:8:"'delete'";s:1:"0";}}}';
$serialiceData = html_entity_decode($serialisedString);
$serialiceData = str_replace(''',"'",$serialiceData);
$permissionArray = unserialize($serialiceData);
直到这是它看起来没问题,我可以选择像这样的第一个数组
print_r($permissionArray[1]);
但是当我尝试取一个内部值时,它显示为null
print_r($permissionArray[1]['permissions']);
请有人告诉我们有什么问题,并给我一个解决方案
答案 0 :(得分:0)
第二次print_r-call上的密钥只有一个问题。
$ permissionsArray的第一个字段(索引零)是具有键" permissionID"的字段。 $ permissionsArray的第二个字段(索引一)是具有键"权限"的字段。
所以你在这里做的是调用$ permissionArray [" permissions"] [" permissions"]。因为此字段存在,所以您获得null值。 :)
因此,数组的三个可能内部值是"查看","编辑","删除"。
print_r($permissionArray[1]['view']);
print_r($permissionArray[1]['edit']);
print_r($permissionArray[1]['delete']);
或
print_r($permissionArray['permissions']['view']);
print_r($permissionArray['permissions']['edit']);
print_r($permissionArray['permissions']['delete']);
答案 1 :(得分:0)
我发现了问题, 我们必须将密钥作为字符串给出,因此我们必须将单引号也包括在内。当我序列化一个帖子数组时,这个单引号即将到来。我这样打电话得到答案
print_r($permissionArray[1]["'permissions'"]);
我不确定这是一种完美的方法。如果有人有其他解决方案,请添加答案