2010-09-26 4 views
1

Как вы знаете, хороший программист - ленивый программист, но я просто ленив. Мой вопрос заключается в следующем: есть ли более простой способ распечатать элемент массива (из запроса MySQL) в выражении echo PHP?Есть ли более простой способ печати массива PHP в строке?

Я обычно делаю это:

echo "string start " . $array['element'] . " string end"; 

Он отлично работает, я бы так же, как более короткий способ печати его, потому что эхо видит «[„элемент“]» бит переменной в виде строка. Я мог бы использовать list(), чтобы получить все элементы, но это не то, что мне нужно.

Итак, есть ли ответы?

Спасибо за чтение,

Джеймс

+0

«Как вы знаете, хороший программист - ленивый программист, но я просто ленив». Я не знал ни того, ни другого. Теперь я чувствую себя просветленным. – GZipp

+0

Я не знаю, сколько эхо-сигналов вы делаете в своем проекте, но если это много, подумайте об использовании одной из многих доступных библиотек шаблонов, чтобы помочь вам распечатать вывод. [Smarty] (http://www.smarty.net/) является популярным. – Nick

+0

Помимо Smarty (популярного) есть [Twig] (http://www.twig-project.org/) (хороший). Twig поддерживает некоторые вещи, которые Smarty не делает (наиболее удобный из всех: Наследование шаблонов) и быстрее, чем умный. – NikiC

ответ

1

Как я сильно не любят вставляя переменные в строках Я предпочитаю использовать эхо с несколькими аргументами:

echo 'string start ', $array['element'], ' string end'; 

Помимо этого быть быстрее, конкатенации (.) это дело лучше вторя результаты выражений, потому что , имеет самый низкий из всех приоритетов.

+0

спасибо! – Bojangles

0

Объемного массив с {} для интерполяции строк, или использовать Sprintf

<?php 
    $array = array('foo'=>'bar'); 

    echo "Print it with {}: {$array['foo']}"; 
    echo "\n"; 
    echo sprintf("Print it with sprintf: %s", $array['foo']); 
2

Я уверен, обратите внимание, я понимаю, что вы хотите сделать.

Если вы хотите "короткий" вариант, ommit конкатенация так:

echo "string start $array[element] string end"; 

Это также работает:

echo "string start {$array['element']} string end"; 
+0

+1 для упоминания расширенного синтаксиса переменных. – NikiC

4

Вы можете на самом деле просто сделать

echo "string start $array[element] string end"; 

PHP позволяет vars в строках с двойными кавычками. При этом, пожалуйста, не делайте этого.

+3

+1 для «пожалуйста, не надо». – GZipp

+0

Вы говорите, что даже обычные переменные (а не массивы) не должны печататься в эхо? Если да, то почему? Кроме того, приведенный выше пример будет работать, но я использую строки как имя элемента, если вы не имеете в виду, что PHP будет принимать элементы массива без кавычек? – Bojangles

+1

Потому что это плохая карма ... Включая массивы. Хорошая идея держать литералы и переменные разделенными, чтобы прочитать код и упростить рефакторинг. (Никто не собирается стрелять в вас, хотя я бы, по крайней мере, избегал, если вы работаете в команде). Это сработает для вас, echo «$ array [element]»; такое же, как echo $ array ['element']; –

2
$s = 'string start '; 
$e = ' string end'; 
$v = $arr['element']; 

// Now you need only 14 keystrokes: 
echo $s.$v.$e; 
+1

Вы можете сделать еще лучше '$ t = $ s. $ V. $ E; echo $ t'. Или вы можете 'define ('t', $ s. $ V. $ E); echo t'. – NikiC

+0

@nikic - Думаю, моя лень имеет свои пределы. :) – GZipp

+0

, хотя фактическое выражение эха короче, ваше решение делает код более длинным и более громоздким для использования inline. В любом случае, спасибо. – Bojangles

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