Лучший способ объединить строки в PHP с пробелами между ними

#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