May I know how can I retrieve givenNmae and middlename value in each array in the following example with PHP? Thank you.
object(stdClass)#13 (1)
{ ["contact"]=> array(157) {
[0]=> object(stdClass)#14 (6) {
["created"]=> string(20) "2007-10-27T04:54:45Z"
["updated"]=> string(20) "2007-10-27T04:54:45Z"
["uri"]=> string(73) "http://social.yahooapis.com/v1/user/SAFWRTHXMZPTISKTIEJPYKLW4I/contact/557"
["isConnection"]=> string(5) "false"
["id"]=> string(2) "57"
["fields"]=> array(2) {
[0]=> object(stdClass)#15 (8) {
["created"]=> string(20) "2007-10-27T04:54:45Z"
["updated"]=> string(20) "2007-10-27T04:54:45Z"
["uri"]=> string(85) "http://social.yahooapis.com/v1/user/SAFWRTHXMZPTISKTIEJPYKLW4I/contact/57/otherid/1351"
["id"]=> string(3) "131"
["type"]=> string(7) "otherid"
["value"]=> string(31) "anastasis_bla@hotmail.com"
["editedBy"]=> string(5) "OWNER"
["flags"]=> string(3) "MSN"
}
[1]=> object(stdClass)#16 (7) {
["created"]=> string(20) "2007-10-27T04:54:45Z"
["updated"]=> string(20) "2007-10-27T04:54:45Z"
["uri"]=> string(82) "http://social.yahooapis.com/v1/user/SAFWRTHXMZPTISKTIEJPYKLW4I/contact/57/name/1310"
["id"]=> string(3) "130"
["type"]=> string(4) "name"
["value"]=> object(stdClass)#17 (7) {
["givenName"]=> string(61) "- miss elaine"
["middleName"]=> NULL
["familyName"]=> NULL
["prefix"]=> NULL
["suffix"]=> NULL
["givenNameSound"]=> NULL
["familyNameSound"]=> NULL
}
["editedBy"]=> string(5) "OWNER"
}
}
} [1]=> object(stdClass)#18 (6) {
["created"]=> string(20) "2009-04-05T13:02:53Z"
["updated"]=> string(20) "2009-04-05T13:02:53Z"
["uri"]=> string(74) "http://social.yahooapis.com/v1/user/SAFWRTHXMZPTISKTIEJPYKLW4I/contact/11"
["isConnection"]=> string(5) "false"
["id"]=> string(3) "116"
["fields"]=> array(2) {
[0]=> object(stdClass)#19 (8) {
["created"]=> string(20) "2009-04-05T13:02:53Z"
["updated"]=> string(20) "2009-04-05T13:02:53Z"
["uri"]=> string(86) "http://social.yahooapis.com/v1/user/SAFWRTHXMZPTISKTIEJPYKLW4I/contact/116/otherid/52"
["id"]=> string(3) "252"
["type"]=> string(7) "otherid"
["value"]=> string(25) "kellying@hotmail.com"
["editedBy"]=> string(5) "OWNER"
["flags"]=> string(3) "MSN"
} [1]=> object(stdClass)#20 (7) {
["created"]=> string(20) "2009-04-05T13:02:53Z"
["updated"]=> string(20) "2009-04-05T13:02:53Z"
["uri"]=> string(83) "http://social.yahooapis.com/v1/user/SAFWRTHXMZPTISKTIEJPYKLW4I/contact/116/name/21"
["id"]=> string(3) "251"
["type"]=> string(4) "name"
["value"]=> object(stdClass)#21 (7) {
["givenName"]=> string(26) "Kelly"
["middleName"]=> NULL
["familyName"]=> NULL
["prefix"]=> NULL
["suffix"]=> NULL
["givenNameSound"]=> NULL
["familyNameSound"]=> NULL }
["editedBy"]=> string(5) "OWNER"
}
}
}
You'll want to read the var dump types to determine how to access the data structure. If it says object
(e.g., in your dump it first lists object(stdClass)#13
), then you'll use ->
operator to access the listed elements (e.g., $object->contact
). If it says array
, you can use index notation [0]
or, if more than one element, iterate with a loop construct:
foreach ($object->contact as $contact) {
foreach ($contact->fields as $field) {
if ($field->type == 'name') {
echo $field->value->givenName, ' ', echo $field->value->middleName;
}
}
}
To access the first one you would use (untested):
$myObject->contact[0]->fields[1]['value']['middleName'];
You should use two nested foreach loops and property_exists()
like this:
foreach( $obj->contact as $contact){
foreach( $contact->fields as $field){
if( property_exists( $field, 'givenName') &&
property_exists( $field, 'middleName')){
// Or use if( $field->type == 'name') as webbiedave suggested
// Here goes your desired values
// Do whatever you want with them
$field->givenName;
$field->middleName;
// If you want only one set of names per each contact, add break here
}
}
// Here goes handling for contacts wit no desired information
}