5

print_r($p->attachments) produces:

Array
(
    [0] => stdClass Object
        (
            [id] => ...
            [url] => http://...png
            [slug] => ...
            [title] => ...
            [description] => ...
            [caption] => ...
            [parent] => ...
            [mime_type] => image/png
            [images] => ...
                (
                )
        )
)

I wish to access the value in the url field

print_r($p->attachments[0]->url) retrieves the url, but also produces: Undefined offset: 0

Now I can supress the error by calling print_r(@$p->attachments[0]->url), but is there a proper way of fixing this?

I am not able to modify the $p object.

Edit:

As suggested, here is response from Var_dump($p->attachments)

 array(1) {
  [0]=>
  object(stdClass)#322 (9) {
    ["id"]=>
    int(1814)
    ["url"]=>
    string(76) "..."
    ["slug"]=>
    string(34) "..."
    ["title"]=>
    string(34) "..."
    ["description"]=>
    string(0) ""
    ["caption"]=>
    string(53) "..."
    ["parent"]=>
    int(1811)
    ["mime_type"]=>
    string(9) "image/png"
    ["images"]=>
    array(0) {
    }
  }
}
15
  • Use @print_r($p->attachments[0]->url) Commented Sep 18, 2013 at 19:15
  • 1
    Try var_dump()ing the object -- the value might not be set Commented Sep 18, 2013 at 19:16
  • 5
    @DontVoteMeDown I would if I could. That buries the problem rather than solves it. Commented Sep 18, 2013 at 19:17
  • 4
    it seems that $p->attachments[0] is not defined every time you try to access it. You can suppress errors if you do: if(isset($p->attachments[0])) { .... } before trying to access it. Commented Sep 18, 2013 at 19:17
  • From the code you've given, there's no reason for the error. I image $p->attachments is sometimes empty, in which case you need to check for this before accessing its first element. Commented Sep 18, 2013 at 19:19

2 Answers 2

15

You can use isset() for check the array:

if(isset($p->attachments[0])){
    echo $p->attachments[0]->url;
}
else {
  //some error?
}

Or if you know that you are only going to be checking index 0 then you can do this way

$array = $array + array(null);

So if the original $array[0] was unset, now it is null

Sign up to request clarification or add additional context in comments.

Comments

0

dunno why it returns you a value and informs you that there is undefined offset 0. strange.

can you check this (since attachments is an array you should do this that way):

if ( count($p->attachments) > 0 ){ 
   foreach ($p->attachments AS $att){
    //do the stuff if attachement 
   }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.