我正在尝试根据自定义字母顺序排序字符串。我有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);
?>
答案 0 :(得分:1)
我认为主要问题是substr()用法。
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;
}