Pracuję na stronie drupal i podczas debugowania zawsze muszę czytać długie, zagnieżdżone tablice. W rezultacie dużą część mojego życia spędzam przy użyciu klawiszy strzałek, powrotu i tabulacji, aby podzielić ponad 1000 ciągów znaków w zagnieżdżony, czytelny format.
W przypadku programistów drupal nie mogę używać dsm () od devel, ponieważ pracuję z wieloetapowymi formularzami # ahah / # ajax i mogę wysyłać tablice tylko do dziennika błędów, a nie na ekran.
Przykład wizualny:
Zło:
array ('form_wrapper' => array ('#tree' => true, '#type' => 'fieldset', '#prefix' => '', '#suffix' => '', '#value' = > '', 'name' => array ('#type' => 'textfield', '#title' => NULL, '#size' => 60, '#maxlength' => 60, '#required' = > false, '#description' => NULL, '#attributes' => array ('placeholder' => 'Email',), '#post' => array ('form_wrapper' => array ('name' => '', 'pass' => '',),...
Dobry:
array (
'form_wrapper' => array (
'#tree' => true,
'#type' => 'fieldset',
'#prefix' => '<div>',
'#suffix' => '</div>',
'#value' => '',
'name' => array (
'#type' => 'textfield',
'#title' => NULL,
'#size' => 60,
'#maxlength' => 60,
'#required' => false,
'#description' => NULL,
'#attributes' => array (
'placeholder' => 'Email',
),
Edycja : Przepraszam, przez "nie wyświetlaj na ekranie", miałem na myśli komunikaty systemowe drupala, w których możliwe jest wysyłanie tablic w klikalnym, zagnieżdżonym formacie (używając devel.module).
Odpowiedzi:
Jeśli chcesz zarejestrować błąd w dzienniku błędów Apache, możesz spróbować tego:
error_log( print_r($multidimensionalarray, TRUE) );
źródło
print_r
(małe litery). Czyprint_R
naprawdę działa również?\n
zamiast rzeczywistych znaków nowej linii.http://php.net/manual/en/function.print-r.php Ta funkcja może być używana do formatowania danych wyjściowych,
$output = print_r($array,1);
$output
jest zmienną łańcuchową, można ją rejestrować jak każdy inny ciąg. W czystym php możesz użyćtrigger_error
Dawny.
trigger_error($output);
http://php.net/manual/en/function.trigger-error.php
jeśli chcesz sformatować go również w html, możesz użyć
<pre>
taguźródło
if you need to format it also in html
trigger_error
tym, że ogranicza wiadomości do maksymalnej długości 1024 lub czegoś podobnego. Ucinanie dłuższychvar_exports
/print_r
sznurków. Jest to przydatne w przypadku prostych konstrukcji.Proste rzeczy:
Korzystanie
print_r
,var_dump
czyvar_export
powinien zrobić to całkiem ładnie, jeśli spojrzeć na wynik w trybie view-source nie w trybie HTML lub jako @Joel Larson powiedział, że jeśli zawinąć wszystko w<pre>
tagu.print_r
jest najlepszy ze względu na czytelność, ale nie wyświetla wartości null / false.var_dump
jest najlepsza do sprawdzania typów wartości i długości oraz wartości null / false.var_export
jest podobny do,var_dump
ale można go użyć do pobrania zrzuconego ciągu.Format zwracany przez którykolwiek z nich jest poprawnie wcięty w kodzie źródłowym i
var_export
może być używany do rejestrowania, ponieważ może służyć do zwracania zrzuconego ciągu.Zaawansowane rzeczy:
Użyj wtyczki xdebug dla PHP, która drukuje
var_dump
jako ciągi w formacie HTML, a nie jako surowy format zrzutu, a także pozwala na dostarczenie niestandardowej funkcji, której chcesz użyć do formatowania.źródło
var_export
pozwala zwrócić ciąg.Moduł Devel w Drupalu ma inne przydatne funkcje, w tym te, które mogą drukować sformatowane tablice i obiekty do plików dziennika. Zobacz przewodnik pod adresem http://ratatosk.net/drupal/tutorials/debugging-drupal.html
źródło
To ci pomoże
echo '<pre>';
$output = print_r($array,1);
echo '</pre>';
EDYTOWAĆ
używanie
echo '<pre>';
jest bezużyteczne, alevar_export($var);
zrobi to, czego oczekujesz.źródło
Powinno być możliwe użycie var_dump () w tagu wstępnym. W przeciwnym razie możesz skorzystać z biblioteki takiej jak dump_r.php: https://github.com/leeoniya/dump_r.phpMoje rozwiązanie jest nieprawidłowe. OP szukał rozwiązania sformatowanego ze spacjami do przechowywania w pliku dziennika.
Rozwiązaniem może być użycie buforowania danych wyjściowych za pomocą var_dump, a następnie str_replace () wszystkich kart ze spacjami, aby sformatować je w pliku dziennika.
źródło
Zastanawiam się tylko, dlaczego nikt nie używa ani nie zaleca sposobu, w jaki wolę debugować tablicę:
Obok mojej przeglądarki
tail
mój serwer loguję się do konsoli np.tail -f /var/log/apache2/error.log
źródło
Składnia
print_r(variable, return);
zmienna Wymagana . Określa zmienną, o której mają zostać zwrócone informacje
powrót Opcjonalne . Gdy jest ustawiona na true, ta funkcja zwróci informacje (nie wydrukuje ich). Wartość domyślna to false
Przykład
error_log( print_r(<array Variable>, TRUE) );
źródło