通用阵列不能完美地充当阵列

时间:2016-02-21 06:47:30

标签: php arrays serialization

我正在制作一些权限模块,为此,我将所有数据作为序列化数组进行处理。当我尝试使用反序列化显示它时,内部数组显示为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']);

请有人告诉我们有什么问题,并给我一个解决方案

2 个答案:

答案 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'"]);

我不确定这是一种完美的方法。如果有人有其他解决方案,请添加答案