Зависит от того, что Вы считаете "рациональным". ;)
Если для Вас "рационально" = "проще", то вариант
$array = array_filter(array_map('trim', $source), function ($v) { return ($v !== ''); })
самый простой. Но он медленнее алгоритма с foreach() в ~3.5 раза.
Вариант:
$array = array();
foreach($source as $k => $v) {
if($v !== '') {
$v = trim($v);
if($v !== '') {
$array[$k] = $v;
}
}
}
самый быстрый. (можно вынести в функцию - скорость уменьшится на ~40%)
На моём компьютере этот вариант даёт ~1.3 секунды на 1 млн. итераций (в цикле) для PHP 5.3.
Тест такой:
$source = array(" помидорка","","огурец "," апельсин "," ");
$t = microtime(1);
for($i=0;$i<1000000;$i++) {
$array = array();
foreach($source as $k => $v) {
if($v !== '') {
$v = trim($v);
if($v !== '') {
$array[$k] = $v;
}
}
}
}
var_dump(microtime(1) - $t, $array);
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru