|
|
|
|
<?php
function sos($f1,$f2){
if(is_dir($f1) && !is_dir($f2)) return -1;
if(!is_dir($f1) && is_dir($f2)) return 1;
if($f1<$f2) return -1; elseif ($f1>$f2) return 1;
else return 0;
}
$d = opendir('.');
while(false !== ($e=readdir($d)) )
$files[$e] = filesize($e);
uksort($files,"sos");
print_r($files);
?>
|
НЕ понятно вот это место: while(false !== ($e=readdir($d)) )
Что это за сравнение? Как расшифровывается строка? | |
|
|
|
|
|
|
|
для: kilogram
(27.04.2012 в 23:33)
| | readdir($d) читает указанную директорию, возвращая либо имена файлов, либо false при достижении конца директории.
$e=readdir($d) присваивает переменной $e текущее имя файла.
false !== ($e=readdir($d)) проверяет достижение конца директории.
То есть в целом строчка означает «перебрать все файлы в директории». | |
|
|
|
|
|
|
|
для: Киналь
(27.04.2012 в 23:46)
| | Нет, немного не так. ) | |
|
|
|
|
|
|
|
для: kilogram
(27.04.2012 в 23:33)
| | А так понятней будет?
<?
while (($e = readdir($d)) !== false)
|
Здесь проверка на идентичность значений потому, что в ином случае, любой элемент каталога, чье имя может быть выражено как FALSE, остановит цикл (например, элемент с именем "0"). | |
|
|
|
|
|
|
|
для: confirm
(27.04.2012 в 23:56)
| | И это немного не так)) Оператор «!==» проверяет тип, так что "0" не подойдёт. | |
|
|
|
|
|
|
|
для: Киналь
(28.04.2012 в 00:02)
| | Вот именно, поэтому он и используется. | |
|
|
|
|
|
|
|
для: confirm
(28.04.2012 в 00:05)
| | Тьфу, неверно прочитал ваш пост, прошу прощения. | |
|
|
|
|
|
|
|
для: kilogram
(27.04.2012 в 23:33)
| | Товарищ Киналь мне своим быстрым комментарием всю масленицу испортил )
А надо было добавить, что существует функция glob(), которая позволяет заменить весь этот бедлам вместе с сортировкой.
<?
foreach (glob("*.*",GLOB_NOSORT) as $filename) echo $filename."<br>";
|
| |
|
|
|
|
|
|
|
для: confirm
(28.04.2012 в 00:16)
| |
while(false !== ($e=readdir($d)) )
|
Здесь проверка переменной $e не равна ли она за типом типу false так как 2 знака равно после восклиц. знака? | |
|
|
|
|
|
|
|
для: kilogram
(28.04.2012 в 00:44)
| | Проверку равенства === и неравенства !== еще называют строгой проверкой, так как проверяются на равенство/неравенство не только сами значения, но и их типы. Например:
<?
echo 1-1 ? 'TRUE' : 'FALSE';
echo '<br>';
echo 1-1 !== false ? 'TRUE' : 'FALSE';
|
В первом случае тип не проверяется и 0 как и положено вернет булево значение false, а во втором случае проверяется и тип, а 0, это не булев тип, а integer. Потому и результат во втором случае будет иной. | |
|
|
|
|
|
|
|
для: kilogram
(28.04.2012 в 00:44)
| |
!== - данные не должны быть эквивалентны
|
while(false !== ($e=readdir($d)) )
|
Если $e не равно типу бул, значению фолс. А зачем здесь проверять на тип?
Какие элементы с какими проверяются? | |
|
|
|
|
|
|
|
для: kilogram
(28.04.2012 в 00:58)
| | Я же выше привел выдержку из манула об этой функции, почему в данном случае применяется строгая проверка.
Здесь запись через "попу", может поэтому дико воспринимается.
Проверяем чему равно значение и тип переменной $e (что возвращает readdir). | |
|
|
|