2016-04-20 62 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 
}