Я заполняю шаблон с некоторыми значениями, являющимися числами, используя str_replace.
Когда число равно 0 (ноль), PHP думает, что оно ложно и ничего не пишет.
Я попробовал все решения, найденные в SO и в Интернете:
Ни один из них не работает.
Единственный способ показать это — объединить $ myZeroVar с пробелом ($myZeroVar.' '
).
Но что, если я не хочу это место ??
Я делаю что-то неправильно ? В конфиге PHP возможно?
Не говорите мне, что вы все соединяете пробел каждый раз, когда выводите число?
Спасибо
РЕДАКТИРОВАТЬ :
Вот моя замечательная система шаблонов (шучу):
$template = 'Some text with a {value}';
$data = 0;
$template = str_replace('{value}', $data, $template);
Результат: «какой-то текст с»
Изменить: решено
Хорошо. Непосредственно перед тем, как я убежал, чтобы спрятаться под столом, я должен сказать вам, что проблема возникла прямо перед моей замечательной системой шаблонов:
if(!empty($data)
Так что теперь я заменил это на $val === '' || $val === null
И все хорошо …
Я люблю терять часы, чтобы решить проблемы, вызванные мной.
Похоже, я никогда не сделаю полезный пост здесь!
Спасибо всем.
Не стоит слишком сильно недооценивать, этот пост несколько полезен для новичков:
ВСЕГДА ПРОВЕРЬТЕ 3 раза!
попробуй что-нибудь подобное
<?php
echo "{$myZeroVar}";
?>
он работал для меня «{$ var}», что формат остановил php, читая его как true / false и вместо этого строку
Как насчет запуска теста, чтобы увидеть, если значение равно нулю. Затем измените его так, чтобы он был нулевой строкой?
$template = 'Some text with a {value}';
$data = 0;
if (!$data) {
$data = "0";
}
$template = str_replace('{value}', $data, $template);
Почему ты не используешь Sprintf вместо str_replace?
Таким образом, вы можете установить свой тип данных в шаблоне строки.
$template = 'Some text with a %d';
$data = 0;
$result = sprintf($template, $data);
printf
Команда и ее друзья обрабатывают форматирование так, как вы хотите.
$template = "Some text with a %.0f\n";
$data = 0;
$output = sprintf($template, $data);
Если вы хотите преобразовать шаблон в формат printf из вашего программного обеспечения, это тоже вариант.
$template = "Some text with a {value}\n";
$data = 0;
$template_fmt = str_replace('{value}', '%.0f', $template);
$output = sprintf($template_fmt, $data);
Обратите внимание, что я использую %.0f
вместо %d
потому что он предлагает вам легкий переход к поддержке более сложных чисел с плавающей запятой. Либо должен сделать.
Моя переменная не отображалась не из-за некоторых ошибок или неправильной конфигурации, а потому, что шаблон заполняется, только если переменная не empty()
,
И пустая функция возвращает true
за 0.
Замена !empty($var)
с ($var !== '' && $var !== null)
решил проблему.