PHP usort - 数组索引无法正确移动

时间:2015-01-26 18:15:00

标签: php usort

我正在尝试根据自定义字母顺序排序字符串。我有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);


?>

1 个答案:

答案 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;
}