【问题标题】:Serialized data list to foreachforeach 的序列化数据列表
【发布时间】:2018-12-29 06:24:36
【问题描述】:

如何列出从数据库中检索到的序列化数据。我的代码失败了。

PHP 5.6

我的数据

a:3:{i:0;a:4:{s:2:"no";i:2;s:4:"name";s:23:"file-417-1546062916.zip";s:4:"type";s:28:"application/x-zip-compressed";s:4:"size";i:31835501;}i:1;a:4:{s:2:"no";i:1;s:4:"name";s:23:"file-417-1546063067.zip";s:4:"type";s:28:"application/x-zip-compressed";s:4:"size";i:31835501;}i:2;a:4:{s:2:"no";i:3;s:4:"name";s:23:"file-417-1546063154.zip";s:4:"type";s:28:"application/x-zip-compressed";s:4:"size";i:31835501;}}

我的代码

$fileStr = $getMeta('post_files', $pID);
$list = ($fileStr) ? unserialize($fileStr) : '';
foreach ($list as $k => $v) {
     echo $k.' - '.$v;
}

注意:............中的数组到字符串的转换 0 - 数组

【问题讨论】:

  • 你看过数组长什么样了吗?你试过 var_dump/print_r 吗?
  • 如果对您有帮助,请随时接受我的回答。

标签: php serialization multidimensional-array foreach


【解决方案1】:

你有一个多维数组,这意味着你需要嵌套两个 foreach。

$str = 'a:3:{i:0;a:4:{s:2:"no";i:2;s:4:"name";s:23:"file-417-1546062916.zip";s:4:"type";s:28:"application/x-zip-compressed";s:4:"size";i:31835501;}i:1;a:4:{s:2:"no";i:1;s:4:"name";s:23:"file-417-1546063067.zip";s:4:"type";s:28:"application/x-zip-compressed";s:4:"size";i:31835501;}i:2;a:4:{s:2:"no";i:3;s:4:"name";s:23:"file-417-1546063154.zip";s:4:"type";s:28:"application/x-zip-compressed";s:4:"size";i:31835501;}}';
$list = unserialize($str);
if(!empty($list)){ // check if the array/string is empty
    foreach ($list as $k => $v) {
        echo $k . "\n";
        foreach($v as $k2 => $val){
            echo $k2.' - '.$val . "\n";
        }
        echo "\n\n";
    }
}

输出:

0
no - 2
name - file-417-1546062916.zip
type - application/x-zip-compressed
size - 31835501


1
no - 1
name - file-417-1546063067.zip
type - application/x-zip-compressed
size - 31835501


2
no - 3
name - file-417-1546063154.zip
type - application/x-zip-compressed
size - 31835501

https://3v4l.org/itGpB

要查看数组的外观,您可以使用 print_r/var_dump 或 var_export。
他们会显示你的数组有多少层,如果它是未知的层数,那么你可以使用 array_walk_recursive 来遍历数组。

【讨论】:

  • @Murat :-) 。我看到您使用三元来查看是否要反序列化。反序列化将静默失败,不会产生任何问题。然而,Foreach 不会默默地失败。我会删除三元并添加一个 if empty 为:3v4l.org/p2hUn 这样如果字符串为空没问题。
猜你喜欢
  • 2021-06-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2020-02-13
  • 2016-07-01
  • 2016-03-03
  • 2014-11-18
  • 1970-01-01
相关资源
最近更新 更多