【发布时间】:2013-03-25 23:24:32
【问题描述】:
列表如下:
Lorem ipsum dolor sit amet,
consectetur adipisicing elit,
sed do eiusmod tempor
...
我想像这样缩进所有单词:
Lorem ipsum dolor sit amet,
consectetur adipisicing elit,
sed do eiusmod tempor
(或至少第一列)
我已经设法使用数组和str_pad:
$lines = explode("\n", $text);
$counts = array();
foreach($lines as $line){
$words = explode(' ', $line);
foreach($words as $index => $word){
if(!isset($counts[$index]) || $counts[$index] < strlen($word))
$counts[$index] = strlen($word);
}
}
$text = '';
foreach($lines as $line){
$words = explode(' ', $line);
foreach($words as $index => $word)
$text .= str_pad($word, $counts[$index], ' ' , STR_PAD_RIGHT) . ' ';
$text .= "\n";
}
但是由于文本非常大,它使用了相当多的内存。有没有其他方法可以做到这一点,而无需将文本拆分为数组?
【问题讨论】:
-
拆分为数组;将 array_map() 与 strlen() 一起使用,然后找到 max() 值
-
如何从字符串中一次取一行,保留最后一行的位置,然后从那里搜索到下一个新行
-
@Alex 你只想找到字符串中最长单词的长度?或者你想证明文本是合理的,所以它占据了一定的宽度?
-
证明它的合理性。但是,如果我知道如何为每列获取最长的单词,我可以自己完成剩下的工作
-
您是在设置宽度还是根据最长单词的长度确定宽度?
标签: php string performance