我有这一系列图片:
array(3) { [0]=> string(15) "./images/00.jpg" [1]=> string(18) "./images/green.png" [2]=> string(18) "./images/image.png" } string(27) "./images/03/./images/00.jpg"
图片数量和名称当然会有所不同,因为会不断删除/添加新图片。
我使用这个foreach循环所有名称:
foreach($images as $image){
$dest = $dest."/".$image;
copy($image, $dest);
unlink($image);
}
在$ images var中我存储了我的图像名称数组(如上所列)。
在$ dest中我有:
$dest = "./images/".$month;
$month = date("m");
$ image var取得了很好的价值(每张图片都是一个完整的路径ex:./ images / 00.jpg),但问题是我的$ dest var我会得到
./images/03/./images/00.jpg //first iteration
./images/03/./images/00.jpg/./images/green.png //second iteration
./images/03/./images/00.jpg/./images/green.png/./images/image.png //third
我想要做的只是进入$ dest:
./images/03/00.jpg
./images/03/green.png
./images/03/image.png
1值/迭代。
答案 0 :(得分:1)
您必须在每次迭代中重新初始化$ dest变量。
这应该有效:
foreach($images as $image){
$dest = "./images/".$month."/".substr($image,strlen("./images/"));
copy($image, $dest);
unlink($image);
}
更新 在$ image var上使用substr只获取您感兴趣的字符串部分。有关更多信息,请参阅doc。
答案 1 :(得分:1)
$dest = $dest."/".$image;
在上面的声明中,它将在下次未初始化$dest
变量时首次正常工作,它将采用先前的值。
所以,你可以用下面的其他方式做同样的事情。
foreach($images as $image){
$img_name = explode('/', $image);
$dest = "./images/". date("m") ."/".$img_name[2]; // ./images/03/00.jpg
copy($image, $dest);
unlink($image);
}
答案 2 :(得分:1)
为什么你联合 $ dest 变量。这就是它返回以下结果
./images/03/./images/00.jpg //first iteration
./images/03/./images/00.jpg/./images/green.png //second iteration
./images/03/./images/00.jpg/./images/green.png/./images/image.png //third
您可以使用pathinfo()
功能来执行您想要的操作。看看下面......
$month=date('m');
foreach($images as $image){
$image_details=pathinfo($image);//The pathinfo() function returns an array that contains information about a path.
$dest = $image_details['dirname']."/".$month."/".$image_details['basename'];
copy($image, $dest);
unlink($image);
}