2016-04-20 27 views
0

晚上好,我想教自己的PHP,因为我去,并决定尝试建立一些东西在我们的局域网服务器工作。PHP处理无效的参数,并期望参数的

我有以下代码工作并显示从目录中的图像,我使用这个,因为我在工作系统中建立一个预订系统,并通过作业号命名图像。

为此我命名的图像测试,但有一个问题,如果有任何图像。

<?php 

$directory = "saved_images/"; 


$images = glob("" . $directory . "test*.jpg"); 

$imgs = ''; 

foreach($images as $image){ $imgs[] = "$image"; } 




$imgs = array_slice($imgs, 0, 20); 

$result = count($imgs); 


if ($result == 0) 
{ 

$img="No Photos"; 
echo $img; 

} 
} else { 
foreach ($imgs as $img) { 
echo "<img src='$img' /> "; 
}} 
?> 

的问题是,如果没有任何照片,我想它呼应没有照片,而不是下面的错误

array_slice() expects parameter 1 to be array, 

指的这条线的

$imgs = array_slice($imgs, 0, 20); 

Invalid argument supplied for foreach() 

ref E-环这条线

foreach ($imgs as $img) 

我看到有人用类似的问题,但遗憾的是,他们被告知忽视这个问题,关闭错误报告,这看起来是正确的,我只是要求,因为这出师表导致项目的其余部分出现任何问题,并想知道如何解决这个问题,所以如果我再次遇到它,我知道该怎么做。

+1

在PHP中有一个is_array()函数,您可以在调用array_slice()函数之前使用它 – Osuwariboy

回答

1

所有你需要做的是设置$imgs作为数组(不是字符串)替换$imgs = '';,检查$imgs是否为空。当你在这里时,你会想要检查$images是否为空。

$directory = "saved_images/"; 

$images = glob("" . $directory . "test*.jpg"); 

// since the entire script relies on $images not being empty, 
// we should check for that to be sure before moving on 
// you can also test for glob() returning FALSE on error, if you anticipate that it might 
if (! empty($images)) { 

    $imgs = []; // this should be set as an array, not a string 
    foreach ($images as $image) 
    { 
     $imgs[] = $image; 
    } 

    if (empty($imgs)) { 
     echo 'No Photo'; 
    } 
    else { 
     $imgs = array_slice($imgs, 0, 20); 

     $result = count($imgs); 
     foreach ($imgs as $img) 
     { 
      echo "<img src='$img'> "; 
     } 
    } 
} 
else { 
    echo 'No images in ' . $directory . '; 
} 
1

你为什么要初始化$imgs作为一个字符串?

$imgs = ''; 

然后将其视为数组?

foreach($images as $image){ $imgs[] = "$image"; } 

如果你想将它初始化为一个数组,

$imgs = array(); 

那么即使在foreach不anythign添加到阵列,它仍然是一个(空)阵列,当你将它传递到array_slice

基本上,你创建一个披萨,然后想知道为什么PHP抱怨它不是巧克力蛋糕。

1

包装

$imgs = array_slice($imgs, 0, 20); 

if(isset())语句中,像这样

if(isset($imgs)){ 
    $imgs = array_slice($imgs, 0, 20); 
} 

如果仍然无法正常工作添加

&& count($imgs) > 0 

编辑: 什么@MarcB说,$imgs = array();

0

您可以使用PHP函数is_array($myArrayVar)PHP Net)来测试是否$img是你正在使用array_slice($imgs, 0, 20)前行的数组。例如:

if (is_array($imgs)){ 
    // $imgs is an array 
} else { 
    //$imgs is not an array 
}