Удаление символа из конца массива un
Я использую этот код для отображения первых букв из строки, где $atit
является массивом этой строки, и результаты должны быть что-то вроде "R. & B. & T.". Но этот код отображает результаты типа "R. & B. & T. &".
Можно ли избавиться от последнего "&"? Я пытался использовать 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. & TI T). но проблема в том, что он добавляет дополнительный "&" в конце (R. & B. & TI T &).
3 ответа
Если вы имели в виду формирование "аббревиатуры", состоящей из первого символа каждой строки из массива строк - вот сложное решение с использованием 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"
При объединении нескольких элементов с такими разделителями я предпочитаю каждый раз проверять переменную результата. Если НЕ пусто, я добавляю конкатенационный разделитель. Если пусто, я не. Таким образом, вы не получите ненужный разделитель в конце.
(Или просто создайте массив элементов и используйте функцию PHP implode())
Например:
$array = array("a", "b", "c", "d");
$result = "";
foreach ($array as $a)
{
if ($result != "") { $result .= " & "; }
$result .= $a;
}
// $result = "a & b & c & d"
Я не понимаю, зачем вам это регулярное выражение и почему вы печатаете отдельные фрагменты строк в каждой итерации цикла.
Я могу предложить это решение:
$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;