Я пытаюсь заказать строку на основе пользовательского алфавита. У меня есть PHP-код, который разбивает файл для сортировки в массив строк. Я пытаюсь заказать каждую строку. Строки располагаются правильно, но они не перемещаются по массиву правильно. Я новичок в php, так что я надеюсь, что кто-то может показать мне мои ошибки.
Спасибо 🙂
<?php
echo " start ";
$file = fopen('inFile.txt', "r");
$firstLine = fgets($file);
echo " hi ";
$x = 0;
while(! feof($file)){
$restOfFile[$x] = fgets($file);
$x++;
}
$firstLine = str_replace(' ','',$firstLine);fclose($file);
//echo $firstLine;
//print_r( $restOfFile);
function mylst($a,$b){
$pos1 = 0;
$pos2 = 0;
global $firstLine;if(strlen($a) > strlen($b)){
$string = $b;
}else{
$string = $a;
}
for ($i=0;$i<(strlen($string) && $pos1===$pos2); $i++){
$pos1 = strpos($firstLine,substr($a,1));
$pos2 = strpos($firstLine,substr($b,1));
}
if ($pos1 === $pos2 && strlen($a) !== strlen($b)){
return (strlen($a)-strlen($b));
}
return $pos1-$pos2;
}echo " BEFORE ";
print_r($restOfFile);
echo " AFTER ";
usort($restOfFile,"mylst");
print_r($restOfFile);?>
Основная проблема, я думаю, это зиЬзЬг () использование.
substr($b,1)
Возвращает все от первой позиции до конца строки. Так должно быть:
substr($b, $i, 1)
Модифицированная функция:
function mylst($a,$b){
$pos1 = 0;
$pos2 = 0;
global $firstLine;$l = (strlen($a) > strlen($b)) ? strlen($b) : strlen($a);
for ( $i = 0; ($i < $l) && ($pos1 === $pos2); $i++){
$pos1 = strpos($firstLine,substr($a,$i,1));
$pos2 = strpos($firstLine,substr($b,$i,1));
}
if ($pos1 === $pos2 && strlen($a) !== strlen($b)){
return (strlen($a)-strlen($b));
}
return $pos1-$pos2;
}
Других решений пока нет …