有类似数据
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 

解决方案 »

  1.   

    几百kb的文件用file函数取数组岂不累死!
    file + foreach的模式在此不实用。
    一般fopen、fread操作文件用:
    while($line=fgets($handle)){
    ......
    }
    读取每行数据。
    另外fopen操作大文件,建议定长+索引模式,以便于fseek操作。
      

  2.   

    $root为"35460" 当$latterType为"35460"跳出foreach,确执行不到if(("35460"==$latterType)){$count=0;break;} echo $root;
    echo $latterType;echo " countOne ".$count;echo " countAll ".count($data),"<br>";3546035460 countOne 33865 countAll 35448