2015-04-28 103 views
1

我有四个名为逗号的文件在数据库中的一个字段中分隔,如下所示:file1,file2,file3,file4。它可能会根据文件上传而改变。用户可以上传最多4个文件,最少一个文件。但我无法得到它。我用爆炸,但它需要很长时间。如何使用PHP从数据库中获得用逗号分隔的值

我使用这个代码:

 $imagefiles = $row["imagefiles"]; 


     $cutjobs = explode(",", $imagefiles); 
     $cutjobs1 = count($cutjobs); 

     $image1 = $cutjobs[0]; 
     $image2 = $cutjobs[1]; 
     $image3 = $cutjobs[2]; 
     $image4 = $cutjobs[3]; 

     if (empty($image1)) { 
     $imagefiles1 = ""; 
     } else { 
     $imagefiles1 = 'http://projects.santabantathegreat.com/glassicam/uploads/'.$registerid. 
     "/".$viewjobsid. 
     "/".$image1; 
     } 

     if (empty($image2)) { 
     $imagefiles2 = ""; 
     } else { 
     $imagefiles2 = 'http://projects.santabantathegreat.com/glassicam/uploads/'.$registerid. 
     "/".$viewjobsid. 
     "/".$image2; 
     } 
     if (empty($image3)) { 
     $imagefiles3 = ""; 
     } else { 
     $imagefiles3 = 'http://projects.santabantathegreat.com/glassicam/uploads/'.$registerid. 
     "/".$viewjobsid. 
     "/".$image3; 
     } 
     if (empty($image4)) { 
     $imagefiles4 = ""; 
     } else { 
     $imagefiles4 = 'http://projects.santabantathegreat.com/glassicam/uploads/'.$registerid. 
     "/".$viewjobsid. 
     "/".$image4; 
     } 
    } 

    $data[] = array('imagearray' => array($imagefiles, $imagefiles1, $imagefiles2, $imagefiles3)); 


    } 
    echo json_encode($data); 
} 

我得到这样的输出:

[{"imagearray":["http:\/\/projects.santabantathegreat.com\/glassicam\/uploads\/60\/30\/file1.jpg","http:\/\/projects.santabantathegreat.com\/glassicam\/uploads\/60\/30\/file2.jpg",""]}] 

如果你看到这个imageArray最后一个越来越 “” 这意味着一些file1file2file3,file4一个名字是丢失的,所以我想显示是否有文件名不存在意味着我不想显示空值与“”

我有一个字段与file1,file2,file3,file4所以时间,我们将有file1,file3然后剩下不会在那里,所以我想计算文件名称用逗号分隔,如果file1是那里应该打印,如果file3是那里不是那么它不应该显示“”

+0

你为什么不使用爆炸? – PHPMan

+0

我是新来的PHP有什么方法可以使用比爆炸 – rocks

+1

虽然它可能或不可能在你的控制之内,但这是一个糟糕的数据库设计。无论何时将多个项目合并到一个数据库列中,您都会遇到问题分裂的问题。更好的设计是使表包含文件名并连接回主表。 –

回答

1

你可以使用split(),但它的deprecated in PHP 5.3.0。所以,而是你留下了:

  • explode()这基本上是更快,因为它不分裂基于正则表达式,所以字符串没有通过正则表达式解析器进行分析。

  • preg_split()这是速度更快,使用PCRE正则表达式正则表达式拆分。

随着preg_split()你可以这样做:

<?php 
    $encoded_data = json_encode($data); 
    $images = preg_split('/,/', $encoded_data->imagearray); 
?> 

我要说的是,explode()更适合这个。

<?php 
    $encoded_data = json_encode($data); 
    $images = explode(',', $encoded_data->imagearray); 
    print_r($images); 
?> 

资源:What is the difference between split() and explode()?


你不应该摆在首位的数组中的空值。但是如果你仍然有任何空值,你可以使用preg_split()类似this one here

同样可以使用array_filter()处理去除值(null, false,'',0)的:

print_r(array_filter($images)); 

这里有这么多的答案,在这个论坛,你问什么:Remove empty array elementsDelete empty value element in array

+0

你是否理解我的图像数组中的问题,你有$ imagefiles,$ imagefiles1,$ imagefiles2,$ imagefiles3,如果任何一个不在那里意味着它显示为null或“” – rocks

+0

你不应该在第一位插入空值。 – cch

+0

更新的代码,你会明白 – rocks