2016-07-03 13 views
1

Holen Sie sich die PHP-Hinweis 'Hinweis: Versuchen, Eigenschaft von Nicht-Objekt' von der folgenden Funktion, die Google Maps API, um den Abstand zwischen zu finden zwei Postleitzahlen (genauer gesagt die ‚Rückkehr‘ Zeile des Codes ist die Auslösung der Bekanntmachung)PHP Hinweis: Versuchen, Eigenschaft von Nicht-Objekt (Google Maps API-Funktion)

function findTheDistanceBetween($postcode_from, $postcode_to){ 

    // tidy up spaces 
    $postcode_from  = str_replace(" ", "+", $postcode_from); 
    $postcode_to  = str_replace(" ", "+", $postcode_to); 

    // get JSON back from Google 
    $json = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?origins=$postcode_from&destinations=$postcode_to&sensor=false&units=metric"); 

    // convert to a normal array 
    $php_array = json_decode($json); 

    // extract output and return it 
    return $php_array->rows["0"]->elements["0"]->distance->value; 

} 

Dieser Teil eines drupal Seite ist, wenn das einen Unterschied macht.

ich auch eine andere Nachricht von der gleichen Rücklaufleitung bekommen:
Hinweis: Undefined offset: 0 in findTheDistanceBetween()

Jede Hilfe sehr geschätzt.

+0

der '$ php_array' ist nicht das, was du erwartest. Es enthält nicht '$ php_array-> rows [" 0 "] -> elements [" 0 "] -> distance-> value'. Versuchen Sie 'print_r ($ php_array);' – PaulH

+0

Die Fehlermeldung sollte die Zeilennummer enthalten, an der der Fehler aufgetreten ist. Das sind nützliche Informationen, bitte geben Sie es an. – PaulH

+0

Ihr Code ist nicht sehr 'robust': Es sollte der Fall behandelt werden, wenn $ JSON einen Fehler enthält – PaulH

Antwort

1

Dies könnte eine Art und Weise schließen Fehler sein

Handhabung
$maps_object = json_decode($json); 
if (isset($maps_object->status)) { 
    if ($maps_object->status == "OK") { 
     // extract output and return it 
     return $maps_object->rows[0]->elements[0]->distance->value; 
    } else { 
     // adapt content to your error handling 
     return 'json status: ' . $maps_object->status; 
    } 
} else { 
    return 'could not obtain json'; 
} 
0

Wie über das Ersetzen/rund um die Bemerkt Anweisung wie folgt für Ihre Debug:

if (isset($maps_object->rows[0]->elements[0]->distance->value)) { 
    return $maps_object->rows[0]->elements[0]->distance->value; 
} else { 
    $error = "Error in: ". __FUNCTION__ ."() file:". __FILE__ ." line:". __LINE__ ."<br>\njson: $json<br>\n"; 
    echo $error; 
    return $error; 
}