从数组的开头和结尾修剪空行的最快方法是什么?

时间:2010-05-02 10:44:01

标签: php string arrays trim

这个脚本:

<?php

$lines[] = '';
$lines[] = 'first line   ';
$lines[] = 'second line ';
$lines[] = '';
$lines[] = 'fourth line';
$lines[] = '';
$lines[] = '';

$lineCount = 1;
foreach($lines as $line) {
    echo $lineCount . ': [' . trim($line) . ']<br/>'; 
    $lineCount++;
}

?>

生成此输出:

1: []
2: [first line]
3: [second line]
4: []
5: [fourth line]
6: []
7: []

更改上述脚本的最快,最有效的方法是什么,以便它还删除前面的尾随空白条目,但不是内部空白条目,以便输出:

1: [first line]
2: [second line]
3: []
4: [fourth line]

我可以使用foreach循环,但我想有一种方法可以使用array_filter或类似的东西来提高效率。

2 个答案:

答案 0 :(得分:1)

// find the first non-blank line
$size = count($lines);
while ($lines[$i] === '' && $i < $size) {
  $i++;
}
$start = $i;

// find the last non-blank line
$i = $size;
while ($lines[$i - 1] === '' && $i > $start) {
  $i--;
}
$end = $i;

// traverse between the two    
for ($i=$start; $i<$end; $i++) {
  echo ($i + $start) . ': [' . trim($lines[$i]) . ']<br/>';
}

答案 1 :(得分:1)

array_slice来创建修剪过的数组。

function trimLines($lines) {
    $end = count($lines);
    for ($start=0; $lines[$start] === ''; ++$start) {
        if ($start == $end) {
            return array();
        }
    }
    do { --$end; } while ($lines[$end] === '');
    return array_slice($lines, $start, $end-$start+1);
}