我有两个目录:一个包含图像,另一个包含ZIP文件。两个目录中的文件具有相同的名称,例如: 1.zip,1.png
我像这样扫描了每个文件夹:
$images = 'screenshots/';
$scanned_images = array_diff(scandir($images), array('..', '.'));
$zips = 'download/';
$scanned_zips = array_diff(scandir($zips), array('..', '.'));然后:
foreach ($scanned_images as $value)
{
echo '<div class="portfolioItem">';
echo '<a href="screenshots/'.$value.'" class="zoom img" title="'.$value.'" rel="portfolio">';
echo '<img src="screenshots/'.$value.'" class="portfolio-image" alt="'.$value.'" /> </a>';
foreach ($scanned_zips as $val)
{
echo '<div class="portfolioDescription">';
echo'<h4>Download:'.$val.'</h4>';
echo'<p><a href="download/'.$val.'">Click here to download</a></p>';
echo'</div></div>';
}
}这不起作用。第一个目录中的每个图像将在其描述中包含第二个目录的整个zip文件!
我还尝试将这两个数组合并为一个数组,并使用foreach ($result as list ($a, $b)),但as list总是给出错误。
如何克服这一点?
发布于 2013-07-15 01:26:50
不需要嵌套的foreach。
使用以下命令:
<?php
$images = 'screenshots/';
$scanned_images = array_diff(scandir($images), array('..', '.'));
$zips = 'download/';
$scanned_zips = array_diff(scandir($zips), array('..', '.'));
foreach ($scanned_images as $value)
{
$name = substr($value, 0, strrpos($value, '.'));
$pos = array_search($name.'.zip', $scanned_zips);
if($pos != null){
echo '<div class="portfolioItem">';
echo '<a href="'.$images.$value.'" class="zoom img" title="'.$value.'" rel="portfolio">';
echo '<img src="'.$images.$value.'" class="portfolio-image" alt="'.$value.'" />';
echo '</a>';
echo '<div class="portfolioDescription">';
echo '<h4>Download:'.$scanned_zips[$pos].'</h4>';
echo '<p><a href="'.$zips.$scanned_zips[$pos].'">Click here to download</a></p>';
echo '</div>';
echo '</div>';
}
}发布于 2013-07-15 01:23:01
一种方法是按名称散列文件,不带扩展名。然后使用相同的密钥检索图像数据和压缩数据。示例:
$scanned_images = array('1.png', '2.png');
$scanned_zips = array('1.zip', '2.zip');
//Should be like that after hashing
$scanned_images = array('1' => '1.png', '2' => '2.png');
$scanned_zips = array('1' => '1.zip', '2' => '2.zip');所以代码可能是:
function get_file_name($path) {
$name = basename($path);
$name = substr($name, 0, strrpos($name, '.'));
return $name;
}
function hash_files_by_name($items) {
$hashed = array();
foreach($items as $item) {
$name = get_file_name($item);
$hashed[$name] = $item;
}
return $hashed;
}
$scanned_images = array('1.png', '2.png'); // get images directory filesnames
$scanned_zips = array('1.zip', '2.zip'); // get zips directory filenames.
$imgs = hash_files_by_name($scanned_images);
$zips = hash_files_by_name($scanned_zips);
foreach ($imgs as $key=>$value)
{
echo '<div class="portfolioItem">';
echo '<a href="screenshots/'.$value.'" class="zoom img" title="'.$value.'" rel="portfolio">';
echo '<img src="screenshots/'.$value.'" class="portfolio-image" alt="'.$value.'" /> </a>';
if(isset($zips[$key])) {
echo '<div class="portfolioDescription">';
echo'<h4>Download:'.$zips[$key].'</h4>';
echo'<p><a href="download/'.$zips[$key].'">Click here to download</a></p>';
echo'</div></div>';
}
}发布于 2013-07-15 01:23:30
在内部foreach循环的末尾添加一条break;语句,这应该可以修复它。您有两个foreach循环,因此会多次列出下载内容。要解决此问题,请执行以下操作
将您的代码更改为:
<?php
foreach ($scanned_images as $value)
{
echo '<div class="portfolioItem">';
echo '<a href="screenshots/'.$value.'" class="zoom img" title="'.$value.'" rel="portfolio">';
echo '<img src="screenshots/'.$value.'" class="portfolio-image" alt="'.$value.'" /> </a>';
foreach ($scanned_zips as $val)
{
echo '<div class="portfolioDescription">';
echo'<h4>Download:'.$val.'</h4>';
echo'<p><a href="download/'.$val.'">Click here to download</a></p>';
echo'</div></div>';
break; //exiting
}
}
?>https://stackoverflow.com/questions/17641447
复制相似问题