Сериализованный список данных для foreach - PullRequest
0 голосов
/ 29 декабря 2018

Как я могу перечислить сериализованные данные, полученные из базы данных.Мой код не работает.

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 - массив

1 Ответ

0 голосов
/ 29 декабря 2018

У вас есть многомерный массив, что означает, что вам нужно два вложенных 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 для обхода массива.

...