Удаление символа из конца массива un

Я использую этот код для отображения первых букв из строки, где $atit массив этой строки и результаты должны быть что-то вроде «R. & B. & Т. «. Но этот код отображает результаты как» Р. & B. & Т. &».

Можно ли избавиться от последнего?&«Я пытался использовать rtrim в echo строка но все удалила&«пока мне нужно удалить только последний.

foreach ($atit as $ati) {
$pieces = explode(' ', $ati);
$otw = preg_replace('/\W\w+\s*(\W*)$/', '$1', $pieces);
$acronym = "";

foreach ($otw as $w) {
$acronym .= $w[0].'. ';
}

$bla = $acronym.' & ';

echo $bla;
}

Я думаю, что это проблема с foreach но я не мог понять это. Любые предложения, пожалуйста?

Обновить:

Каждая запись в массиве состоит из нескольких слов, поэтому приведенный выше код предназначен для отображения первых букв всех слов, кроме последней в каждой записи.

Пример:

$atit = ["Right now", "Behind you", "This is the time"];

Поэтому приведенный выше код сначала удалит последнее слово в каждой записи массива, а затем получит и отобразит в нем первые буквы остальных слов, что-то вроде этого (R. & B. & Т. И. Т). но проблема в том, что он добавляет дополнительный&«до конца (р. & B. & Т. И. Т &).

0

Решение

Если вы имели в виду формирование «аббревиатуры», состоящей из первого символа каждой строки из массива строк — вот сложное решение с использованием array_map, array_slice, implode, explode а также ucfirst функции:

$atit = ["Right now", "Behind you", "This is the time"];

$acronym = implode(" & ", array_map(function($v) {
$words = explode(" ", $v);
if (count($words) > 2) {
return implode(".", array_map(function($w) {
return ucfirst($w[0]);
}, array_slice($words, 0, -1)));
}
return $words[0][0] . ".";  // for simple strings (less/equal two words)
}, $atit));

echo $acronym;  // "R. & B. & T.I.T"
1

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

При объединении нескольких элементов с такими разделителями я предпочитаю каждый раз проверять переменную результата. Если НЕ пусто, я добавляю конкатенационный разделитель. Если пусто, я не. Таким образом, вы не получите ненужный разделитель в конце.

(Или просто создайте массив элементов и используйте функцию PHP implode ())

Например:

$array = array("a", "b", "c", "d");
$result = "";
foreach ($array as $a)
{
if ($result != "") { $result .= " & "; }
$result .= $a;
}
// $result = "a & b & c & d"
1

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

Я могу предложить это решение:

$atit = ["Right now", "Behind you", "This is the time"];

$partList = array();
foreach ($atit as $ati) {
$pieces = explode(' ', $ati);
$numberOfPieces = sizeof($pieces);
if ($numberOfPieces > 1) {
$pieces = array_slice($pieces, 0, $numberOfPieces-1);
}

$acronym = "";
foreach ($pieces as $w) {
$acronym .= strtoupper($w[0]).'. ';
}

$partList[] = $acronym;
}

$bla = implode('& ', $partList);
echo $bla;
1
По вопросам рекламы [email protected]