通用化阵列不能完美地充当数组


Universalized array is not perfectly acting as an array

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

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