我使用serialize方法将数据插入数据库,如下所示:
a:1:{i:0;a:3:{
i:0;s:14:"docs/name.docx";
i:1;s:39:"docs/php-advanced-master.zip";
i:2;s:39:"docs/php-master.zip";
}}
现在使用此功能,显示/打印文件名列表:
function _file_list_($id,$type){
$files = DataAccess::fetch("SELECT * FROM " . NEWS_FILES . " WHERE news_id = ? AND type = ? ",$id , $type );
if (count($files) > 0) {
$list_files = unserialize($files[0]['url']);
$count = count($list_files[0]);
for($i=0; $i<$count; $i++){
$files_show[] = array($list_files[0][$i]);
}
return $files_show;
}
else
{
return FALSE;
}
}
这对我有用,结果是:
docs/name.docx
docs/php-advanced-master.zip
docs/php-master.zip
但是,我需要从列表中显示/打印docs/php-advanced-master.zip
。
我如何打印/显示此内容?
答案 0 :(得分:1)
您可以使用array_walk并使用您需要的任何逻辑来仅显示您需要的文件。以下代码将调用您的函数并处理结果。它将检查列表中是否有带“php-advanced-master.zip”的文件名并输出。
$files = array_unique(_file_list_($id,$type), SORT_REGULAR);
array_walk_recursive($files, function ($value) {
if (false !== stripos($value, "php-advanced-master.zip")) {
echo $value;
}
});
但是,如果要直接从SQL查询中过滤序列化数据。假设您的序列化数据存储在“url”字段中,您可以像这样修改您的函数:
function _file_list_($id,$type, $filenameFilter){
$files = DataAccess::fetch("SELECT * FROM " . NEWS_FILES . " WHERE news_id = ? AND type = ? AND url like '%?%'",$id , $type, $filenameFilter);
if (count($files) > 0) {
$list_files = unserialize($files[0]['url']);
$count = count($list_files[0]);
for($i=0; $i<$count; $i++){
$files_show[] = array($list_files[0][$i]);
}
return $files_show;
}
else
{
return FALSE;
}
}