Я успешно импортирую контакт электронной почты с Yahoo API Oauth. И я вижу, что весь мой контактный адрес электронной почты указан на странице, когда я повторяю его. Однако при успешной печати электронного письма появляется сообщение об ошибке:
Trying to get property of non-object in globalses.php on line 295
А ТАКЖЕ
Undefined offset: 1 in globalses.php on line 295
Это код, который показывает эту ошибку:
if (! empty($response)) {
list($info, $header, $body) = $response;
if ($body) {
//logit("callcontact:INFO:response:");
//print(json_pretty_print($body));
$yahoo_array = json_decode($body);
echo "<pre/>";
//print_r($yahoo_array);
foreach($yahoo_array as $key=>$values){foreach($values->contact as $keys=>$values_sub){
// echo '<pre/>';
// print_r($values_sub);
// echo $values_sub->fields[1]->value->givenName;
$email = $values_sub->fields[1]->value; //This is line 295
if(trim($email)!="")
$newList .= $email.",";
}
}
}
$retarr = $newList."";
}
return $retarr;
[ОБНОВИТЬ] Результат печати $values->contact
Array
(
[0] => stdClass Object
(
[isConnection] =>
[id] => 50331977
[fields] => Array
(
[0] => stdClass Object
(
[id] => 50332026
[type] => email
[value] => [email protected]
[editedBy] => OWNER
[flags] => Array
(
)
[categories] => Array
(
)
)
)
[categories] => Array
(
)
[error] => 0
[restoredId] => 0
)
[1] => stdClass Object
(
[isConnection] =>
[id] => 41
[fields] => Array
(
[0] => stdClass Object
(
[id] => 63
[type] => email
[value] => [email protected]
[editedBy] => OWNER
[flags] => Array
(
)
[categories] => Array
(
)
)
)
[categories] => Array
(
)
[error] => 0
[restoredId] => 0
)
[2] => stdClass Object
(
[isConnection] =>
[id] => 50331986
[fields] => Array
(
[0] => stdClass Object
(
[id] => 50332036
[type] => email
[value] => [email protected]
[editedBy] => OWNER
[flags] => Array
(
)
[categories] => Array
(
)
)
[1] => stdClass Object
(
[id] => 50332037
[type] => guid
[value] => APQMLKWC3QLQRAMYZQABSF63ZA
[editedBy] => OWNER
[flags] => Array
(
[0] => Y360
)
[isConnection] =>
[categories] => Array
(
)
)
)
[categories] => Array
(
)
[error] => 0
[restoredId] => 0
)
[ОБНОВИТЬ]
foreach($values->contact as $keys=>$values_sub){
if(property_exists($values_sub, 'value') && !is_array($values_sub->value))//echo $values_sub->fields[1]->value->givenName;
$email = $values_sub->fields[1]->value;
if(trim($email)!="")
$newList .= $email.",";
[ОБНОВЛЕНИЕ] результат var_dump
[email protected](31) "[email protected]"[email protected](30) "[email protected]"APQMLKWC3QLQRAMYZQABSF63ZAstring(26) "APQMLKWC3QLQRAMYZQABSF63ZA"[email protected](25) "[email protected]"[email protected](24) "[email protected]"IKN34TUEMHOJNOBUJQP5D2CBDQstring(26) "IKN34TUEMHOJNOBUJQP5D2CBDQ"[email protected](17) "[email protected]"[email protected](31) "[email protected]"[email protected](20) "[email protected]"[email protected](18) "[email protected]"[email protected](14) "[email protected]"[email protected](22) "[email protected]"[email protected](24) "[email protected]"[email protected](33) "[email protected]"
Вы получаете доступ к электронной почте по ее полям как:
$email = $values_sub->fields[1]->value; //This is line 295
Когда вы видите первый элемент массива, нет никаких полей с ключом 1, так как это только значение в массиве. $fields[0].
Видя ваш код и реальный массив, я придумываю следующее: это может быть не полное решение, но надеюсь, что это приведет к результату.
Так что это должно быть что-то вроде этого:
foreach($values->contact as $keys=>$values_sub){
$fields = $values_sub->fields;
foreach($fields as $field){
if(property_exists($field,'value') && !is_array($field->value)){
echo (string) $field->value;
}
}
}
Других решений пока нет …