有类似数据
11111 5666
5533 11111
5555 8999
21254 5555
21254 5533。
前后为父子关系
找到没有父亲的节点(根节点)<?php
$handle=fopen($uploadFile,"r");
$data=file($uploadFile); $finding=findRoot($data);
echo "根节点:".$finding;
function findRoot($data){
$root='';
$count=0;
foreach($data as $line){
$LineArray= explode(' ',$line);
$formerType=$LineArray[0];
$root=$formerType;
foreach($data as $line){
$count++;
$LineArray= explode(' ',$line);
$latterType=$LineArray[1];
if($root==$latterType){$count=0;break;}
else if($count==count($data))
return $root;
}
}
}
?>
只含几行的小文件可以测试成功,如果几百kb的就不行了,一直停留在第一个root
35460 35461
35460 35462
23444 35460
根节点:23444
32292 32301
32292 32304
32292 32312
32292 32300
32292 32295
32292 145259
32292 32296
32292 32302
17452 143536
17452 17453
根节点:17452
11111 5666
5533 11111
5555 8999
21254 5555
21254 5533。
前后为父子关系
找到没有父亲的节点(根节点)<?php
$handle=fopen($uploadFile,"r");
$data=file($uploadFile); $finding=findRoot($data);
echo "根节点:".$finding;
function findRoot($data){
$root='';
$count=0;
foreach($data as $line){
$LineArray= explode(' ',$line);
$formerType=$LineArray[0];
$root=$formerType;
foreach($data as $line){
$count++;
$LineArray= explode(' ',$line);
$latterType=$LineArray[1];
if($root==$latterType){$count=0;break;}
else if($count==count($data))
return $root;
}
}
}
?>
只含几行的小文件可以测试成功,如果几百kb的就不行了,一直停留在第一个root
35460 35461
35460 35462
23444 35460
根节点:23444
32292 32301
32292 32304
32292 32312
32292 32300
32292 32295
32292 145259
32292 32296
32292 32302
17452 143536
17452 17453
根节点:17452
file + foreach的模式在此不实用。
一般fopen、fread操作文件用:
while($line=fgets($handle)){
......
}
读取每行数据。
另外fopen操作大文件,建议定长+索引模式,以便于fseek操作。
echo $latterType;echo " countOne ".$count;echo " countAll ".count($data),"<br>";3546035460 countOne 33865 countAll 35448