2014-10-21 2 views
0

У меня возникают проблемы с форматированием массивов и вложенными массивами с функцией печати в PHP.Форматирование массивов и вложенных массивов с функцией печати в PHP

До сих пор изучая PHP, я обертывал команды печати " " и помещал базовый html как <p> в кавычки с единственными переменными, и все работает нормально. Сегодня я создаю массивы и вложенные массивы и получаю какое-то странное поведение.

Например:

// nested array 
$array2 = array(6, "fox", "dog", array("x", "y", "z")); 
// display nested array index 1 
print "<p> $array2[3][1] </p>"; 

Печатается Array[1] вместо y.

Если я это печатает нормально:

print "<p>" . $array2[3][1] . "</p>"; 

Последний массив, который я пытаюсь получить для печати с помощью печати readible с <pre> тегами. До сих пор я попытался это, но все, что я вижу в браузере просто array

print_r("<pre>" . $array2 . "</pre>"); 

я должен делать что-то неправильно, если теги не Concat?

+0

Вам необходимо преобразовать массив в строку как-то. Посмотрите на функцию implode PHP http://php.net/manual/en/function.implode.php – Weltschmerz

+0

'"

{$ array2 [3] [1]}

"' – AbraCadaver

ответ

1

При использовании

print_r("<pre>" . $array2 . "</pre>"); 

Вы конкатенации строк <pre> и </pre> с массивом, то он автоматически преобразует массив "Array", и она равна следующему:

print_r("<pre>" . (string)$array2 . "</pre>"); 

Что вы на самом деле хотите сделать это print_r на самом массиве - не превращать его в строку. Вы можете принять использование второго параметра в print_r, чтобы вернуть значение, а не выводить его:

echo '<pre>' . print_r($array2, true) . '</pre>'; 
+0

Спасибо - я заметил, что вы используете одиночные кавычки, это имеет значение в этом случае? Единственный раз, когда я использовал одинарные кавычки, есть функция '$ _POST'. Кроме того, 'echo' и' print' одинаковы? – user1574598

+0

[Как эхо и печатать разные в PHP?] (Http://stackoverflow.com/questions/234241/how-are-echo-and-print-different-in-php). По сути, «эхо» быстрее, но реагирует немного по-другому (вы, вероятно, не заметите разницы, поэтому просто используйте «echo».При использовании одиночных кавычек внутри внутри не расширяются (расширение переменной - это почему «echo» $ test «;» работает. Используйте то, что вы предпочитаете, поскольку [разность скоростей настолько минимальна, что это не имеет значения] (http: // stackoverflow .com/questions/3446216/what-is-the-difference-between-single-quoted-and-double-quoted-strings-in-php). – h2ooooooo

+0

Я вижу, спасибо. Поэтому, когда вы говорите «расширяться», что бы произойдет, если вы написали 'echo '$ test'' будет ли это еще расширяться, но будет выполняться быстрее? – user1574598

1

Вы должны добавить фигурные скобки:

// nested array 
$array2 = array(6, "fox", "dog", array("x", "y", "z")); 
// display nested array index 1 
print "<p> {$array2[3][1]} </p>"; 

От manual:

Если встречается знак доллара ($), синтаксический анализатор с жадностью принимает как много токенов, чтобы сформировать правильное имя переменной. Включить имя переменной в фигурных скобках, чтобы явно указать конец имя.

Смежные вопросы