在PHP中预测两个数组?

时间:2013-10-29 10:14:42

标签: php arrays foreach

我有两个像这样的数组

$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中组合两个数组?

7 个答案:

答案 0 :(得分:4)

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

foreach($slike as $i => $value){
    echo'<a href='.$value.'><img src='.$slikethumb[$i].'></a>'; 
}

答案 1 :(得分:1)

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

foreach($slikethumb as $key => $val) {
  echo '<a href='.$slike[$key].'><img src='.$val.'></a>';
}

答案 2 :(得分:1)

编辑:

考虑到您的related question,您可能需要考虑使用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个数组,因为您可以看到on this codepad
这种方法的好处:

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

当然,有一些警告:

  • 不太可读&amp;可维护的代码
  • 如果您添加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);
}

正如你所看到的那样on this codepad,它也会像魅力一样

答案 3 :(得分: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>';
}

答案 4 :(得分:1)

You will try 

foreach($slike as $key=>$slike_val)
echo'<a href='.$slike_val.'><img src='.$slikethumb[$key].'></a>';

答案 5 :(得分: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 {
       ...?
   }
} 

答案 6 :(得分: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 />";
        }
        ?>
  • 感谢