#php #arrays #string
#php #массивы #строка
Вопрос:
Если у меня есть простой код, подобный этому:
$a="hi";
for($i=0;$i<3;$i )
{
echo $a;
}
итак, результат будет таким hihihi
, возможно ли преобразовать его в строку, такую как $b="hihihi"
, больше не проходя через цикл?
Я использую это для другой функции…
Спасибо.
Ответ №1:
Для достижения этой цели вы можете использовать str_repeat($str, $count)
:
$str = str_repeat("hi", 3);
echo $str;
Приведенный выше код выведет «hihihi».
Вот документация для этого: http://www.php.net/manual/en/function.str-repeat.php
Ответ №2:
Я предположу, что ваша ситуация немного сложнее, чем приведенный пример…
Одним из вариантов было бы не передавать ваши переменные в буфер. Вместо этого добавьте их в свою собственную переменную:
$out = '';
for ($i = 0; $i < 3; $i) {
$out .= 'hi';
}
echo $out; // "hihihi"
Однако, если по какой-либо причине эхо-отображение не происходит в коде, который вы контролируете, вы могли бы использовать буферизацию вывода.
ob_start();
for ($i = 0; $i < 3; $i) {
doSomethingWhichPrintsHi();
}
$out = ob_get_clean(); // "hihihi"
Ответ №3:
Есть варианты без цикла:
$b = str_repeat('hi', 3); // hihihi
или, если у вас есть массив:
$array = array ( 'hi', 'bye', '!!!' );
$b = implode('', $array); // hibye!!!
Ответ №4:
Вы можете использовать str_repeat(string $input, int $multiplier).
$b = str_repeat($a, 3);
Также смотрите мой пример.
Ответ №5:
<?php
function stringdoubler($string, $duplicates) {
if ($duplicates > 1)
$string = $string . stringdoubler($string, $duplicates-1);
return $string;
}
echo stringdoubler("hi",3);
?>
Комментарии:
1. Рекурсивная функция для такого рода задач? Вы серьезно?
2. Это извращенное безумие распечатывается и размещается на моей «стене чрезмерной инженерии».
3. Рекурсия не сложна 🙂