2015-01-26 31 views
0

我想基于自定义字母顺序排列字符串。我有PHP代码,打破文件被排序成一个字符串数组。我试图为每个字符串排序。字符串自己排序正确,但它们没有正确移动数组。我是新来的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

我想我误解你想要做什么。你能给出一个你将使用的输入样本和期望的输出样本吗? – 2015-01-26 18:33:32

+0

当然 输入 'vcawufotrb laencfuesw gvtkwekfom vrsfqictqc wmcvmjmtet qetegyqelu newaxdtjlt nfrfrwkknj fzqrvgblov gkkmgwwwpa' 输出 'newaxdtjlt nfrfrwkknj laencfuesw gkkmgwwwpa gvtkwekfom fzqrvgblov wmcvmjmtet vcawufotrb vrsfqictqc qetegyqelu' 用英文字母表示您的电子邮件地址 – 2015-01-26 19:24:04

回答

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