2010-05-02 10 views
0

Ce script:Quel est le moyen le plus rapide de rogner les lignes vides du début et de la fin de la matrice?

<?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++; 
} 

?> 

produit cette sortie:

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

Quelle est la plus rapide, la plus efficace de changer le script ci-dessus afin qu'il supprime également la précédente et arrière blanc entrées, mais pas les entrées vides intérieur pour qu'elle soit ceci:

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

je pourrais utiliser la boucle foreach mais j'imagine il y a un moyen avec array_filter ou quelque chose de similaire qui est beaucoup plus efficace.

Répondre

1

Il existe array_slice pour créer le tableau rogné.

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); 
} 
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/>'; 
}