Ну, вы можете использовать что-нибудь получше, чтобы получить расширение, подобное этому
$ext = strrchr($file, ".");
Единственная разница в том, что .
сохраняется, поэтому, если $file
равно somefile.txt
, возвращается .txt
, что, если вы хотите избавиться от вас, всегда может сделать это
$ext = ltrim(strrchr($file, "."), '.');
Для справки
http://php.net/manual/en/function.strrchr.php
strrchr - Найти последнее вхождение символа в строку.
строка strrchr ( строка $ стог сена, смешанная $ игла)
Эта функция возвращает часть стога сена, которая начинается при последнем появлении иглы и продолжается до конца стога сена.
Так что он просто находит последний .
и возвращает это и все после, тогда ltrim
это просто «левая» обрезка.
P.S. Мне очень не нравится использовать Explode для получения расширения, это одна из моих любимых мозолей.
Так что для вашего конкретного случая я бы:
foreach($filelist as $value => $file) {
$ext = ltrim(strrchr($file, "."), '.');
if(in_array($ext, $extensions) && is_file($dir.$file)) { $c++; }
if(isset($_GET['start'])) { $nav = $_GET['start']; } else { $nav = "0"; }
if(($c > $nav)&&($c < $nav+($pagerows+1))) {
$link = $dir . $file;
$hlink = $http . $file;
//$ext = explode(".", $file); we've already done this no need to do it again
Таким образом, вы получаете расширение один раз, вы не создаете для него массив explode
, вы не перемещаете указатель массива в конец массива end
, и это все.
UPDATE
Вы можете сравнить эти два с помощью microtime
, чтобы увидеть, что быстрее, они оба действительно быстрые, поэтому нам нужно выполнить около 100 тыс. Итераций, чтобы проверить это, например:
$filename = "filename.php";
$start = microtime(true);
for($i=0; $i<=100000; $i++){
$v=explode(".", $filename);
$ext1 = end($v);
}
echo "1. ext='$ext1' Complete ".number_format((microtime(true) - $start), 4).PHP_EOL;
$start = microtime(true);
for($i=0; $i<=100000; $i++){
$ext2 = ltrim(strrchr($filename, '.'), '.');
}
echo "2. ext='$ext2' Complete ".number_format((microtime(true) - $start), 4).PHP_EOL;
Выходы
1. ext='php' Complete 0.0178
2. ext='php' Complete 0.0098
----------------------------
1. ext='php' Complete 0.0237
2. ext='php' Complete 0.0125
---------------------------
1. ext='php' Complete 0.0252
2. ext='php' Complete 0.0098
---------------------------
1. ext='php' Complete 0.0190
2. ext='php' Complete 0.0102
Вы можете проверить это здесь онлайн
Ясно одно: это почти в 2 раза быстрее, но в данном случае это не имеет большого значения. Но проверять эти вещи никогда не повредит. Оба дают эквивалентные результаты, но strrchr
легче читать, хорошо, если вы знаете, что делает функция в любом случае. Это своего рода неясная функция, но в основном это означает str ing r ight ch a r acter.
Приветствие.