我正在服务器上插入多个图像,并使用(,)分隔使用此图像将名称存储在SQL数据库中。
if($request->hasFile('images')){
$images= [];
foreach($images=$request->file('images') as $img) {
$name=$img->getClientOriginalName();
$img->move(public_path().'/dpic', $name);
$images[]=$name;
}
}
$test =implode(", ", $images);
$product->images =$test;
图像名称与一些显示输出的数据一起插入数据库。
/tmp/php59iuBb, /tmp/phpdRewVH, PicturesI.jpg, Screenshot.png
我想从输出中删除此/tmp/php59iuBb, /tmp/phpdRewVH
。我该怎么做。
请指导我这样做。
答案 0 :(得分:6)
我会这样做
$images =[
'/tmp/php59iuBb', '/tmp/phpdRewVH', 'PicturesI.jpg', 'Screenshot.png'
];
$images = preg_grep('~^(?!/tmp/)~', $images);
print_r($images);
输出
Array
(
[2] => PicturesI.jpg
[3] => Screenshot.png
)
简单吧!
Preg grep对数组运行正则表达式并返回匹配项。
在这种情况下
~^(?!/tmp/)~
否定性回首-确保匹配不以/tmp/
开头剩下我们想要的东西。
另一个选择是
$images = array_filter($images,function($image){
return substr($image, 0, 5) != '/tmp/';
});
如果您不喜欢Regex的话。
PS我喜欢preg_grep,它经常被忽略,以便于理解,但代码冗长。 Preg Filter是其中的另一个,您可以使用它们为整个数组添加前缀或后缀。例如,我曾用它在文件名数组等的路径之前添加前缀。例如,这很简单:
$images =[
'/tmp/php59iuBb', '/tmp/phpdRewVH', 'PicturesI.jpg', 'Screenshot.png'
];
print_r(preg_filter('~^(?!/tmp/)~', '/home/images/', $images));
//or you can add a whole image tag, if you want, with a capture group (.+) and backrefrence \1
print_r(preg_filter('~^(?!/tmp/)(.+)~', '<img src="/home/images/\1" />', $images));
输出
Array
(
[2] => /home/images/PicturesI.jpg
[3] => /home/images/Screenshot.png
)
Array
(
[2] => <img src="/home/images/PicturesI.jpg" />
[3] => <img src="/home/images/Screenshot.png" />
)
我认为您可能会发现“技巧”很有用,因为您可以删除坏的东西,同时添加通往好东西的路径。他们值得一试。
http://php.net/manual/en/function.preg-grep.php
http://php.net/manual/en/function.preg-filter.php
我觉得我应该提到匹配文件扩展名的情况,这也许也很有用,但是我将把它再留一天。
干杯!
答案 1 :(得分:0)
foreach循环是一条语句,该语句还将图像的临时路径存储到$images
在foreach中更改变量名称
$images=$request->file('images') tto $image=>$request->file('images')