2016-04-20 8 views
0

Good Evening des Parameters, ich versuche mich php zu lehren, wie ich gehe und beschlossen, etwas für unseren LAN-Server zu versuchen, bei der Arbeit aufzubauen.PHP mit ungültigem Argumente zu tun und erwartet

Ich habe den folgenden Code, das funktioniert und zeigt die Bilder aus einem Verzeichnis, verwende ich das, wie ich bin eine Buchung im System für die Arbeit und die Benennung des Bildes durch die Auftragsnummer zu bauen.

dafür, ich bin die Benennung der Bilder Test aber ein Problem mit, wenn es irgendwelche Bilder inst.

<?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' /> "; 
}} 
?> 

das Problem ist, wenn es keine Fotos ist, würde Ich mag es keine Fotos anstelle der folgenden Fehler

array_slice() expects parameter 1 to be array, 

zu dieser Linie Echo beziehen

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

und

Invalid argument supplied for foreach() 

ref Ering zu dieser Linie

foreach ($imgs as $img) 

ich jemand mit einem ähnlichen Problem gesehen habe, aber leider war sie geraten, um das Problem zu ignorieren und die Fehlerberichterstattung deaktivieren, die ich als diese inst bin nur nicht richtig sein, zu fragen verursacht irgendein Problem für den Rest des Projektes und mag wissen, wie man dieses Problem repariert, wenn ich es wieder treffe, weiß ich, was zu tun ist.

+1

Es gibt eine Funktion is_array() in PHP, die Sie vor Aufruf der Funktion array_slice() verwenden könnten – Osuwariboy

Antwort

1

Alles, was Sie tun müssen, um $imgs als Array gesetzt ist (kein String), und prüfen Sie, ob $imgs leer ist oder nicht.Wenn Sie gerade dabei sind, sollten Sie überprüfen, ob $images leer ist oder nicht.

$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

Warum Sie $imgs als String initialisiert wird?

$imgs = ''; 

und dann behandelt es als ein Array?

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

Wenn Sie es als ein Array initialisieren würden, z.

$imgs = array(); 

Dann, auch wenn die foreach anythign auf das Array nicht hinzufügen, es wird noch ein (leer) Array, wenn Sie es in array_slice passieren.

Im Grunde erstellen Sie eine Pizza, dann fragen, warum PHP beschwert sich, dass es nicht ein Schokoladenkuchen.

1

Wrap

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

innerhalb einer if(isset()) Aussage, wie so

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

Wenn es immer noch nicht funktioniert

&& count($imgs) > 0 

es

Bearbeiten hinzu:Undwas @MarcB sagte ersetzen $imgs = ''; mit $imgs = array();

0

können Sie verwenden, um die PHP-Funktion is_array($myArrayVar) (PHP Net) zu testen, ob $img ein Array vor der Zeile ist, wo Sie array_slice($imgs, 0, 20) verwenden. Etwas wie:

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