Jump to content

[SOLVED] Undefined offset - solutions?


bronzemonkey

Recommended Posts

I've been using the code below but it is throwing up "PHP Notice:  Undefined offset".

 

My pages are going to display varying numbers of photos and if I don't provide a full set of 8 photos then I get php notices. I tried using if(isset()) preceding 'echo' at the bottom of the code but got nowhere. How can I displaying varying quantities of information without generating these php notices? Thanks

 

<?php
$page = $_SERVER["PHP_SELF"];

if(strpos($page, 'page1.php') !== false) {

   $pic [1] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [2] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [3] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [4] = '<a href="#"><img src="#" alt="" /></a>';
}

elseif(strpos($page, 'page2.php') !== false) {

   $pic [1] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [2] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [3] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [4] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [5] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [6] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [7] = '<a href="#"><img src="#" alt="" /></a>';
   $pic [8] = '<a href="#"><img src="#" alt="" /></a>';
}

?>
      <div id="photos">
         <h4>Photos</h4>
         <ul>
            <li><?php echo $pic[1]; ?></li>
            <li><?php echo $pic[2]; ?></li>
            <li><?php echo $pic[3]; ?></li>
            <li><?php echo $pic[4]; ?></li>
            <li><?php echo $pic[5]; ?></li>
            <li><?php echo $pic[6]; ?></li>
            <li><?php echo $pic[7]; ?></li>
            <li><?php echo $pic[8]; ?></li>
         </ul>
      </div>

Link to comment
https://forums.phpfreaks.com/topic/65473-solved-undefined-offset-solutions/
Share on other sites

Change this code:

<li><?php echo $pic[1]; ?></li>
            <li><?php echo $pic[2]; ?></li>
            <li><?php echo $pic[3]; ?></li>
            <li><?php echo $pic[4]; ?></li>
            <li><?php echo $pic[5]; ?></li>
            <li><?php echo $pic[6]; ?></li>
            <li><?php echo $pic[7]; ?></li>
            <li><?php echo $pic[8]; ?></li>

into a loop:

for($i = 1; $i < count($pic); $i++)
{
    echo '<li>' . $pic[$i] . "</li>\n            ";
}

I'd suggest storing the lenght of the array in a variable rather than calling the function each time.

 

$len = count($pic);

 

try starting your loop at 0 instead of 1.

bronzemonkey's pic array starts at 1. Thats why I start the loop at 1. Calling count each time wont have much of a difference either (parsing time wise). However I get what you mean though.

I knew why you posted what you did. Just think that since arrays are zero indexed they should be used as such. And yeah, on small inputs the count thing isn't noticable, but on larger inputs and taking these considerations across your code I think you'll see improvements.

Is it more correct to begin my array at 0?

 

I'm sure there is a better way than storing all the html for photos/quotes/links etc in an array...but I am new to php so this is the best I have come up with so far!

 

Before I read you replies I tried out this code, which also seems to avoid the php notices. But is there a reason neither of you recommended it over your suggestions?

 

<?
foreach ($pic as $value)
{
echo '<li>' . $value . '</li>';
}
?>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.