Как объединить строки PHP, не копируя значения PHP из одного места в другое в памяти?

Я сделал функцию, которая принимает любое количество слов для параметра и использует первую букву каждого слова.

Я посмотрел на этом сайте: http://www.carlconrad.net/en/2014/03/17/improving-php-performance/ и в нем говорится:

Избегайте конкатенации строк в циклах. При помещении в цикл конкатенация строк приводит к созданию большого количества временных объектов и ненужному использованию сборщика мусора. Оба потребляют память и могут значительно замедлить выполнение скрипта.

Я пытаюсь понять, как я могу изменить свой код ниже, чтобы он работал быстрее. Есть ли другой способ объединить строки в PHP, не полагаясь на значение оригинала?

Я знаю, что в сыром языке Си я мог бы использовать адресный указатель строки плюс смещение в определенных пределах, чтобы добавлять данные, не беспокоясь о том, что исходная строка копируется в другое место, источники утверждают, что PHP делает во время конкатенации.

В идеале я хочу, чтобы моя конкатенация строк работала так, как работает этот код C (предположим, что мы находимся в функции main ()):

char string[1000];
memcpy(string,'ABCD',4); //place ABCD at start
memcpy(string+4,'EFGH',4); //add EFGH to the string (no previous string copying required)

Просто простая конкатенация без манипулирования предыдущим значением строки.

Это мой PHP-код, который нуждается в совете по улучшению:

function capitalize($words){
$words=$words.' ';
$returnedwords='';
$eachword=explode(' ',$words);$numberofwords=count($eachword);
if ($numberofwords >=1){
$wordkey=array_keys($eachword);
for($thiswordno=0;$thiswordno<$numberofwords;$thiswordno++){
$word=$eachword[$wordkey[$thiswordno]];
$returnedwords.=' '.strtoupper(substr($word,0,1)).strtolower(substr($word,1));
}
return substr($returnedwords,1);
}
}

Любые идеи, как я могу следовать рекомендации веб-сайтов, чтобы избежать конкатенации строк в циклах, как у меня в?

2

Решение

В PHP есть функция, чтобы сделать первое слово строки в качестве заглавной.

пример 1: имя строки:

$str = 'this is test value of data';
echo ucwords('this is test value of data');

вывод: это тестовое значение данных

Пример 2: создать строку ucword из массива, содержащего много слов:

$str = array(
'this',
'is',
'test',
'VALUE',
'of',
'Data'
);

$str = array_map('ucwords', array_map('strtolower', $str));

echo implode(' ', $str);

вывод: это тестовое значение данных

для более подробной информации взгляните на: Строковые функции PHP

1

Другие решения

Других решений пока нет …