Я пытаюсь использовать функцию uasort () в Cake PHP Controller.
У меня есть текстовый файл, содержащий имя файла в каждой строке. Имя файла имеет формат SOME_TEXT_YY.MM.DD_HH-MM_SOME_TEXT. Я хочу отсортировать файлы после указанной даты и сохранить их снова, поэтому я написал этот код php, который работает правильно, используя обычный php:
<?
// compare function
function cmp($a, $b) {
$a1 = explode('-', $a);
$a2 = explode('S', $a1[1]);
$ac = substr($a1[0], -11,11).$a2[0];
$b1 = explode('-', $b);
$b2 = explode('S', $b1[1]);
$bc = substr($b1[0], -11,11).$b2[0];
if ($ac == $bc) {
return 0;
}
return ($ac < $bc) ? -1 : 1;
}
$files = file("files.txt");
uasort($files, 'cmp');
file_put_contents('sorted.txt', $files);
foreach ($files as $line) {
echo $line."</br>";
}
?>
Когда я пытаюсь запустить это в функции контроллера в Cake PHP, это как-то не работает. Я предполагаю, что это из-за «вложенной» функции. Кто-нибудь знает, как заставить это работать внутри контроллера?
Заранее спасибо
ОБНОВЛЕНИЕ
Я получаю ошибку
Предупреждение (2): uasort () ожидает, что параметр 2 будет действительным обратным вызовом, функция 'cmp' не найдена или недопустимое имя функции [APP / Controller / KeysController. php, строка 123]
class KeysController extends AppController {
[...]
public function update() {
$dir = WWW_ROOT . 'data';
$files_filename = $dir . DS . "files.txt";
function cmp($a, $b) {
$a1 = explode('-', $a);
$a2 = explode('TVOON_DE', $a1[1]);
$ac = substr($a1[0], -11,11).$a2[0];
$b1 = explode('-', $b);
$b2 = explode('TVOON_DE', $b1[1]);
$bc = substr($b1[0], -11,11).$b2[0];
if ($ac == $bc) {
return 0;
}
return ($ac < $bc) ? -1 : 1;
}
$otrkeys = file($files_filename);
uasort($otrkeys, 'cmp');
file_put_contents($files_filename, $otrkeys);
echo "sortiert";
}
}