php - 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 是否有好处。
解决方案
为此有一个特殊功能,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_ZEICHEN
是0
或比字符串长,它不会削减任何内容。
请注意,...
字符串长度中包含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)
推荐阅读
- python - 即使网络接口关闭,Python 的套接字库也会阻塞
- react-native - React Native CLI - 如何在设备上调试 Redux?
- swift - Swift UIAction 的构造函数采用尾随闭包?
- sql - 如何在postgresql中只保留表的不同行
- mqtt - 无法使用 nodemcu 在 MQTT 上发布数据
- excel - 从所有图形和图表中删除标题
- javascript - 当用户位于“错误”国家/地区时的网站国家/地区切换覆盖 > 是否存在现有服务或开源项目?
- c# - 我想检查进程是否已经结束,然后执行下一个语句
- kubernetes - 掌舵升级时出现集群类型错误
- pandas - 在同一列中查找具有非空值的行