我正在研究一些权限模块,为此我将所有数据作为序列化数组进行。当我尝试使用未序列化显示它时,内部数组显示为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]);
但是当我尝试获取一个内部值时,它显示为空
print_r($permissionArray[1]['permissions']);
请任何人告诉问题是什么,也给我一个解决方案
只是您在第二次print_r呼叫中的键有问题。
$permissionsArray的第一个字段(索引零)是键为"permissionID"的字段。$permissionsArray的第二个字段(索引一)是具有键"权限"的字段。
所以你在这里做的是调用$permissionArray["权限"]["权限"]。由于此字段不存在,因此您将获得 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']);
我发现了问题,我们必须将键作为字符串给出,因此我们也必须包含单引号作为键。当我序列化一个帖子数组时,这个单引号就来了。我这样打电话得到了答案
print_r($permissionArray[1]["'permissions'"]);
我不确定这是一个完美的方法。如果有人有其他解决方案,请添加答案