0

我使用此代码显示字符串中的第一个字母,其中$atit是该字符串的数组,结果必须类似于“R. & B. & T.”。但是此代码显示的结果类似于“R. & B. & T. &”。

是否有可能摆脱最后一个“&”?我尝试使用rtrimin echoline 但它删除了所有“&”,而我只需要删除最后一个。

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 &)。

4

3 回答 3

1

当使用这样的分隔符连接多个元素时,我更喜欢每次检查结果变量。如果不是空的,我会在连接分隔符之前添加。如果是空的,我不会。这样,您就不会在最后得到不需要的分隔符。

(或者只是创建一个元素数组并使用 PHP implode() 函数)

例如:

$array = array("a", "b", "c", "d");
$result = "";
foreach ($array as $a)
{
   if ($result != "") { $result .= " & "; }
   $result .= $a;
}
// $result = "a & b & c & d"
于 2016-05-11T21:27:58.683 回答
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;
于 2016-05-11T22:23:13.457 回答
1

如果您的意思是形成一个由字符串数组中每个字符串的第一个字符组成的“首字母缩略词” - 这是使用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"
于 2016-05-11T20:19:26.497 回答