2016-03-30 9 views
0

Ich vermisse etwas, oder habe einen Fehler in PHP 5.6.17 gefunden.Ich habe ein Array, das error_log(), aber nicht print_r() bricht, und funktioniert perfekt sonst

Ich habe ein Array von Daten, die, wenn ich es durch error_log() (edit: Mit print_r ($ Array, True), damit ich eine Zeichenfolge übergeben) bekomme ich;

Array 
(
    [ 

Wo würde ich normalerweise erwarten zu sehen;

Array 
(
[person_id]=> 123456 
) 

Es ist, als ob die erste Array Tastenausgabe wird beendet, aber der erste Array-Schlüssel ist ein leerer Sub-Array mit nichts Ungewöhnliches über sie.

Seltsamerweise, wenn ich print_r() verwende, druckt es das Array gut, und alle Array-basierten PHP-Funktionen, die Arrays bearbeiten oder über sie iterieren, haben kein Problem mit dem Array.

Einige meiner Schlüssel sind so;

Array 
(
[per_roles] => Array 
    (
    ) 

[per_roles_retrieved] => 
[per_cache] => Array 
    (
    ) 

[*member] => 
[*addresses] => 
[*marketing_preferences] => 
[*suppliers] => 
[_table] => address 
[id] => 454545 
[*exists] => 1 
[*_related_objects] => Array 
    (
    ) 

[*_related_object] => Array 
    (
    ) 
[first_name] => John 
[middle_name] => 
[last_name] => Smith 

) 

Was ist das Problem, und sind es die Sternchen?

+0

Ich habe die Antwort gefunden. Das Problem besteht darin, dass das Array von einem Objekt stammt, das als Array gecastet wird. Geschützte Eigenschaften dieses Objekts werden bei der Umwandlung in ein Array mit ihren Schlüsseln mit Nullzeichen versehen, um sie zu "schützen". Diese Null-Zeichen führen dazu, dass error_log (einmal durch print_r ($ var, true)) davon ausgegangen wurde, dass das Ende der Zeichenkette erreicht ist, sodass die Ausgabe gestoppt wird. Um es zu beheben, müssen Sie diese Null-Zeichen ersetzen oder stattdessen print_r verwenden. –

Antwort

0

Gemäß dem Handbuch unter http://php.net/manual/en/function.error-log.php nimmt die Funktion error_log() eine Zeichenfolge als Argument, kein Array. Versuchen Sie, das Array vor dem Aufruf von error_log() in eine Zeichenfolge zu konvertieren.

+0

Ich habe das gesehen, aber es erklärt nicht, warum es so weit kommt. Ich würde erwarten, dass eine typische "Funktion erwartet, dass Parameter 1 ein String ist, Array gegeben" -Fehler. –

+0

Ich habe keine Erklärung für dieses Verhalten. Sie können jedoch einfach die Funktion json_encode() verwenden, um das Problem mit error_log() zu lösen. –

+0

Sorry, ich habe etwas von der Frage verpasst, ich habe es aktualisiert. Ich verwende print_r ($ array, true), um das Array an Fehlerprotokoll übergeben, also übergebe ich tatsächlich eine Zeichenfolge. Es gibt etwas an dieser Zeichenfolge, das nicht behandelt wird. Wenn ich dasselbe mache, aber ein einfacheres Testarray (oder irgendein anderes mehrdimensionales Array mit Arrays und Arrays von Objekten) überlasse, ist es nie zuvor ausgefallen. –

Verwandte Themen