首页 > 解决方案 > chunk_split 与 substr 的好处?

问题描述

通过重构不是我的旧代码,我偶然发现了这段代码:

if(BESCHREIBUNG_PRODUKT_MAX_ZEICHEN != 0 && strlen($row['beschreibung']) > BESCHREIBUNG_PRODUKT_MAX_ZEICHEN){
    $beschreibung = chunk_split($row['beschreibung'], BESCHREIBUNG_PRODUKT_MAX_ZEICHEN, 'x+x+x+');
    $beschreibung_array = explode('x+x+x+', $beschreibung);
    $beschreibung = $beschreibung_array[0].'...';
}

据我了解,字符串 $row['beschreibung'] 被分成长度的一部分,由常量“BESCHREIBUNG_PRODUKT_MAX_ZEICHEN”和“x+x+x+”提供的长度附加到每个部分。然后这个新字符串被附加的字符串“x+x+x+”分割,结果创建了一个数组。最后但并非最不重要的一点是,数组的第一项被分配给变量“$beschreibung”,并附加了“...”。

我想知道如果 substr resp. mb_substr 因为输入字符串使用 UTF-8 可以代替使用,因此在我看来可以避免创建一个无用的数组。

所以我改进的代码如下所示:

if(BESCHREIBUNG_PRODUKT_MAX_ZEICHEN != 0 && strlen($row['beschreibung']) > BESCHREIBUNG_PRODUKT_MAX_ZEICHEN){
    $beschreibung = mb_substr($row['beschreibung'], 0, BESCHREIBUNG_PRODUKT_MAX_ZEICHEN).'…';
}

我是否理解这一点,或者在我不知道的情况下使用 chunk_split 是否有好处。

标签: php

解决方案


为此有一个特殊功能,mb_strimwidth() 请参见此处:https ://www.php.net/manual/en/function.mb-strimwidth.php

例子:

$beschreibung = mb_strimwidth($row['beschreibung'], 0, BESCHREIBUNG_PRODUKT_MAX_ZEICHEN, '...');

您将不需要该if语句,因为 ifBESCHREIBUNG_PRODUKT_MAX_ZEICHEN0或比字符串长,它不会削减任何内容。

请注意,...字符串长度中包含3 个点

mb_strimwidth("Hello",0,6,'...');  // output: "Hel..."
mb_strimwidth("Hello",0,0,'...');  // output: "Hello"
mb_strimwidth("Hello",0,20,'...'); // output: "Hello"
mb_strimwidth("Hello",0,5,'…');   // output: "Hell…" (utf-8 ellipsis)

推荐阅读