【问题标题】:Deleting character from the end of un array从 un 数组的末尾删除字符
【发布时间】:2016-05-11 19:47:38
【问题描述】:

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

可以去掉最后一个“&”吗?我尝试在echo 行中使用rtrim,但它删除了所有“&”,而我只需要删除最后一个。

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. & T. I. T)。但问题是它在末尾添加了一个额外的“&”(R. & B. & T. I. T &)。

【问题讨论】:

  • $bla[] = $acronym;并在循环后回声 implode(' & ', $bla);
  • 你能发一个数组的样本吗?
  • 您能否发布一个完整的可重现示例,包括 R. & B. & T. 的来源?和/或您的rtrim 用法,应该可以做到。
  • 其实数组是从wordpress函数代码wp_get_object_terms获取当前帖子相关的词条
  • 问题已更新

标签: php arrays foreach character-trimming


【解决方案1】:

如果您的意思是形成一个由字符串数组中每个字符串的第一个字符组成的“首字母缩写词” - 这是使用 array_maparray_sliceimplodeexplodeucfirst 函数的复杂解决方案:

$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"

【讨论】:

  • 非常感谢,但我需要剩下的代码。您可以在问题更新中看到原因。等待您的回复
【解决方案2】:

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

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

例如:

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

【讨论】:

    【解决方案3】:

    我不明白你为什么需要那个正则表达式以及为什么在每次循环迭代中打印单独的字符串片段。

    我可以建议这个解决方案:

    $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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多