#php #string #concatenation
#php #строка #объединение
Вопрос:
Мне нужно объединить неопределенное количество строк, и я хотел бы, чтобы между двумя смежными строками был пробел. Вот так a b c d e f
.
Также я не хочу никаких начальных или конечных пробелов, каков наилучший способ сделать это в PHP?
Комментарии:
1. Как вы храните эти строки? Находятся ли они в массиве? Или в отдельных переменных?
2. Это отдельные переменные, и если параметр vriable не задан или является пустой строкой, я не хочу, чтобы он включался в объединенную строку.
3. @freshest И как генерируются переменные? Разве вы не можете поместить значения в массив вместо свободных переменных?
4. 1- за «лучшее» в названии
5. Затем просто создайте массив строк по мере перебора строк базы данных и помещайте переменные в массив, только если они не пустые (тогда вы можете выполнить сжатие). Добавьте этот код сюда, если вы не уверены, как это сделать.
Ответ №1:
Вы имеете в виду $str = implode(' ', array('a', 'b', 'c', 'd', 'e', 'f'));
?
Ответ №2:
Простой способ:
$string="hello" . " " . "world";
Ответ №3:
function concatenate()
{
$return = array();
$numargs = func_num_args();
$arg_list = func_get_args();
for($i = 0; $i < $numargs; $i )
{
if(empty($arg_list[$i])) continue;
$return[] = trim($arg_list[$i]);
}
return implode(' ', $return);
}
echo concatenate("Mark ", " as ", " correct");
Ответ №4:
$strings = array( " asd " , NULL, "", " dasd ", "Dasd ", "", "", NULL );
function isValid($v){
return empty($v) || !$v ? false : true;
}
$concatenated = trim( implode( " ", array_map( "trim", array_filter( $strings, "isValid" ) ) ) );
//"asd dasd Dasd"
Ответ №5:
Я просто хочу добавить к ответу deviousdodo, что если в массиве есть пустые строки, и вы не хотите, чтобы они отображались в объединенной строке, такой как «a, b,, d,, f», то лучше использовать следующее:
$str = implode(‘,’, array_filter(array(‘a’, ‘b’, «, ‘d’, «, ‘f’)));
Ответ №6:
учитывая, что у вас есть все эти строки, собранные в массив, способ сделать это может быть через предложение foreach, например:
$res = "";
foreach($strings as $str) {
$res.= $str." ";
}
if(strlen($res > 0))
$res = substr($res,-1);
таким образом, вы можете контролировать процесс для будущих изменений.
Комментарии:
1. Звучит излишне, когда у вас есть
implode()
.2. да, я знаю, но обычно мне нравится, когда все открыто и находится под контролем, что дает мне свободу вносить изменения в любое время, когда я сталкиваюсь с неизвестными типами данных, потому что теперь это массив строк, но вы никогда не знаете, что произойдет во время разработки, поэтому мне нравится иметь такую свободу. У меня всегда есть время изменить его на простой implode / join, насколько я уверен в материале.
3. Ваше решение (использование
foreach
) предполагает, что строки находятся в массиве. Использованиеimplode
также предполагает, что строки находятся в массиве. Я не вижу здесь свободы, я вижу только кучу ненужных строк, которые снижают читаемость.4. это дает мне свободу иметь строку любых объектов и изменять внутренности операторов в цикле, вот и все. и это только для проблем с прототипированием, конечно, когда вы уверены, вы все делаете правильно, поэтому, если это будет массив строк, очевидно, вы выбираете более навороченное и менее трудоемкое решение, такое как implode или join