注意:未定义的偏移量:不同的行

时间:2019-04-21 09:55:39

标签: php arrays foreach

我正在尝试显示存储在2个数组中的图像元数据...
当图像没有名称时,我想显示“ no-name”。这是我现在显示这些的方式:

$imgs = array('img 1','img 2','img 3','img 4','img 5','img 6');
$imgNames = array('name 1','name 2','name 3',);

foreach($imgs as $files => $img)
{
    echo 'Image: '.$img.' and Name: '.$imgNames[$files].'<br>';
};

我希望输出:

Image: img 1 and Name: name 1
Image: img 2 and Name: name 2
Image: img 3 and Name: name 3
Image: img 4 and Name: no-name
Image: img 5 and Name: no-name
Image: img 6 and Name: no-name

但实际输出是:

Image: img 1 and Name: name 1
Image: img 2 and Name: name 2
Image: img 3 and Name: name 3
Notice: Undefined offset: 3 in XX.php …
Image:img 4 and Name: 
Notice: Undefined offset: 4 in XX.php …
Image:img 5 and Name: 
Notice: Undefined offset: 5 in XX.php …
Image:img 6 and Name: 

如何解决此问题以显示默认的“无名称”字符串?

2 个答案:

答案 0 :(得分:1)

您可以为此使用isset()$imgNames数组包含三个元素,而$imgs包含六个元素,您已经遍历了$imgs,这意味着它将运行六次,而$imgNames的某些元素未定义。如果isset()函数对当前$files$imgNames[$files]返回false,那么它将被分配一个字符串'no-name'

    <?php
$imgs = array('img 1','img 2','img 3','img 4','img 5','img 6');
$imgNames = array('name 1','name 2','name 3',);

foreach($imgs as $files => $img)
{
  if(!isset($imgNames[$files]))
  {
    $imgNames[$files] = 'no-name';
  }
echo 'Image: '.$img.' and Name: '.$imgNames[$files].'<br>';
}
?>

这里是demo

答案 1 :(得分:0)

ImagNames有3个元素,而另一个数组有5个元素。

如果密钥不存在,您可以添加一张不打印的支票

foreach($imgs as $files => $img)
{

 if(array_key_exists($files,$imgNames){

   echo 'Image: '.$img.' and Name: '.$imgNames[$files].'<br>';
 }
};