0

我有两个这样的数组

$slike = Array('artist2-1.jpg', 'artist2-2.jpg', 'artist2-3.jpg', 'artist2-4.jpg');
$slikethumb = Array('artist2-1_thumb.jpg',
                    'artist2-2_thumb.jpg',
                    'artist2-3_thumb.jpg',
                    'artist2-4_thumb.jpg');

当我foreach有两个数组时,我想查看此输出

echo'<a href='.$slike.'><img src='.$slikethumb.'></a>';

我知道如何使用foreach一个数组,但是我必须做些什么才能将两个数组合并到一个 foreach 中?

4

7 回答 7

4

如果这些数组排序正确并且都具有相同数量的元素:

foreach($slike as $i => $value){
    echo'<a href='.$value.'><img src='.$slikethumb[$i].'></a>'; 
}
于 2013-10-29T10:16:46.043 回答
1

如果数组和排序中的元素数量相同,则

foreach($slikethumb as $key => $val) {
  echo '<a href='.$slike[$key].'><img src='.$val.'></a>';
}
于 2013-10-29T10:16:27.277 回答
1

编辑:

考虑到您的相关问题,您可能需要考虑使用glob更具体的模式扫描您的目录,类似于以下内容:

$sLike = glob('{0,1,2,3,4,5,6,7,8,9}.jpg',GLOB_BRACE);
//selects all .jpg files with names ending with number.jpg, so no _thumb.jpg files

然后,考虑到这一点并根据您的评论。如何删除文件扩展名:

$sLike = array();//the array from dir scan
$clean = array();
foreach($sLike as $file)
{
    $clean[] = substr($file, 0, strpos($file, '.')*-1);//get file name
}
$format = '<a href="%s.jpg"><img src="%1$s_thumb.jpg" /></a>';//output format
foreach($clean as $like)
{
    printf($format, $like);
}

或者,使用更自由的glob调用模式,并且如果您想使用选项 2(每个文件具有不同扩展名的选项):

$sLike = array();//the array from dir scan
$clean = array();
foreach($sLike as $file)
{
    $endOffset = strpos($file, '.')*-1;
    $clean[] = array(
        substr($file, 0, $endOffset),//get file name
        substr($file,$endOffset)//get extension, includes the . char!
    );
}
$format = '<a href="%s%s"><img src="%1$s_thumb%2$s" /></a>';//output format
foreach($clean as $like)
{
    echo vsprintf($format, $like);
}

就是这样...


我要做的只是使用一个数组。两个图像的基本字符串相同:

$slike=array(
        'artist2-1',
        'artist2-2',
        'artist2-3',
        'artist2-4'
);//remove extensions
$format = '<a href="%s.jpg"><img src="%1$s_thumb.jpg" /></a>';//output format
foreach($slike as $like)
{
    printf($format, $like);
}

这会给你你想要的,而不需要 2 个数组,正如你这个 codepad上看到的那样。
这种方法的好处:

  • 只构造 1 个数组,而不是 2 个
  • 使用printfwhich 在内部转换为fprintf(stdout, "<your format>", zval*$like);C 中的 a,速度很快。
  • 没有多余的脂肪:几乎没有重复。您甚至可以将格式更改为artist2-%s.jpg"><img src="artist2-%s_thumb.jpg" />,并且只将数字存储在数组中,但这已经很荒谬了。
  • 简明扼要的代码

当然,也有一些注意事项:

  • 可读性和可维护性较差的代码
  • 如果您添加了 1 张具有不同扩展名 (png) 的图像,则必须重构...

这是你的选择。如果可能发生不同的扩展,您可以将上面的代码更改为:

$slike=array(
        array('artist2-1','jpg'),
        array('artist2-2','png'),
        array('artist2-3','gif'),
        array('artist2-4','jpeg'),
);//remove extensions

$format = '<a href="%s.%s"><img src="%1$s_thumb.%2$s" /></a>';//output format
foreach($slike as $like)
{
    echo vsprintf($format, $like);
}

正如你这个键盘上看到的那样,它也可以像一个魅力一样工作

于 2013-10-29T10:29:41.293 回答
1

你可以使用for循环

for($i = 0; $i< count($slike); $i++)
{
   $slike_val      = $slike[$i];
   $slikethumb_val = $slikethumb[$i];
   echo'<a href='.$slike_val.'><img src='.$slikethumb_val.'></a>';
}
于 2013-10-29T10:34:50.893 回答
1
You will try 

foreach($slike as $key=>$slike_val)
echo'<a href='.$slike_val.'><img src='.$slikethumb[$key].'></a>';
于 2013-10-29T12:05:29.417 回答
0
foreach ($slike as $key=>$img) {
   print '<a href='.$img.'><img src='.$slikethumb[$key].'></a>';
}

或者,如果您想要一个不是基于订购的......

foreach ($slike as $key=>$img) {
   list($name, $ext)=explode('.', $img);
   $thumb=$name . '_thumb.' . $ext;
   if (in_array($thumb, $slikethumb)) {
       print '<a href='.$img.'><img src='.$thumb.'></a>';
   } else {
       ...?
   }
} 
于 2013-10-29T10:20:30.887 回答
0

试试这样:

<?php
        $slike = array('artist2-1.jpg', 'artist2-2.jpg', 'artist2-3.jpg', 'artist2-4.jpg');

        $slikethumb = array('artist2-1_thumb.jpg', 'artist2-2_thumb.jpg', 'artist2-3_thumb.jpg', 'artist2-4_thumb.jpg');

        foreach($slike as $key1 => $value1)
        {
            echo $value1."--------->".$slikethumb[$key1]."<br />";
        }
        ?>
  • 谢谢
于 2013-10-29T10:27:16.020 回答