Ну, вы могли бы использовать что-то лучше, чтобы получить такое расширение
$ext = strrchr($file, ".");
Единственная разница в том, что это сохраняет .
, поэтому, если $file
равно somefile.txt
, он возвращает .txt
, от которого, если вы хотите избавиться, вы всегда можете это сделать.
$ext = ltrim(strrchr($file, "."), '.');
Для справки
http://php.net/manual/en/function.strrchr.php
strrchr — найти последнее вхождение символа в строку.
строка strrchr ( строка $haystack , смешанный $needle )
Эта функция возвращает часть стога сена, которая начинается с последнего вхождения иглы и продолжается до конца стога сена.
Таким образом, он просто находит последний .
и возвращает его и все последующее, затем ltrim
просто оставляет обрезку.
P.S. Мне действительно не нравится использовать взорваться для получения расширения, это одна из моих любимых мозолей.
Итак, для вашего конкретного случая я бы:
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
и все.
ОБНОВЛЕНИЕ
Вы можете сравнить эти два, используя 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
легче читать, если вы все равно знаете, что делает функция. Это довольно непонятная функция, но в основном она означает усиливание правогосправедливого выбораrактера.
Ваше здоровье.
person
ArtisticPhoenix
schedule
27.04.2018