2016-01-20 56 views
0

我有一個很大的問題,我無法找到排序數組項的任何方法。我的代碼:在WHILE循環內對數組進行排序

<?php 
error_reporting(0); 
$lines=array(); 
$fp=fopen('file.txt, 'r'); 
$i=0; 
while (!feof($fp)) 
{ 
    $line=fgets($fp); 
    $line=trim($line); 
    $lines[]=$line; 
    $oneline = explode("|", $line); 
    if($i>30){ 
    $fz=fopen('users.txt', 'r'); 
    while (!feof($fz)) 
{ 
    $linez=fgets($fz); 
    $linez=trim($linez); 
    $lineza[]=$linez; 
    $onematch = explode(",", $linez); 
    if (strpos($oneline[1], $onematch[1])){ 
     echo $onematch[0],$oneline[4],'<br>'; 
    } 
    else{ 
    } 
    rewind($onematch); 
} 
    } 
    $i++; 
} 
fclose($fp); 
?> 

事情是,我想對正在被$ oneline [4]回顯的項目進行排序。我嘗試了幾個從stackoverflow其他職位 - 但沒能找到解決方案。

+0

你想如何對它們進行排序? – kittykittybangbang

+0

也許你可以嘗試保存從你的fopen()返回的數據並保存在一個json或數組上,然後你可以訂購這個新的數組或json(本地存儲) – BlackHack123

+0

@kittykittybangbang我想按降序對它進行排序。 – JustinasT

回答

2

的大雁你的問題是,爲了進行排序$oneline[4],這似乎包含一個字符串值,則需要以下步驟適用:

  1. 分割字符串到一個數組($oneline[4] = explode(',', $oneline[4])
  2. 排序所得到的陣列(sort($oneline[4])
  3. 陣列組合成一個字符串($oneline[4] = implode(',', $oneline[4])

由於我得到的印象變量命名是低優先級列表中我重新使用$oneline[4]變量。主要是爲了澄清我所指代碼的哪一部分。


話雖這麼說,有你應該作出其他改善措施,如果你想成爲未來的你自己說話了(如果你需要在一兩個月的這個代碼工作)

  • 選擇一個編碼風格,並堅持下去,原來的代碼看起來就像是複製/來自至少4個不同的來源(主要是不一致的報價的標誌和大括號)
  • 儘量限制重複昂貴的操作粘貼,例如只要你可以打開文件(公平地說,agents.data可以包含31行和d的users.txt將被打開一次造成我看像一個傻瓜)

我已經更新了你的代碼樣本,試圖說明我的意思通過上述幾點。

<?php 
error_reporting(0); 
$lines = array(); 
$users = false; 

$fp = fopen('http://20.19.202.221/exports/agents.data', 'r'); 
while ($fp && !feof($fp)) { 
    $line = trim(fgets($fp)); 
    $lines[] = $line; 
    $oneline = explode('|', $line); 

    // if we have $users (starts as false, is turned into an array 
    // inside this if-block) or if we have collected 30 or more 
    // lines (this condition is only checked while $users = false) 
    if ($users || count($lines) > 30) { 
     // your code sample implies the users.txt to be small enough 
     // to process several times consider using some form of 
     // caching like this 
     if (!$users) { 
      // always initialize what you intend to use 
      $users = []; 

      $fz = fopen('users.txt', 'r'); 
      while ($fz && !feof($fz)) { 
       $users[] = explode(',', trim(fgets($fz))); 
      } 
      // always close whatever you open. 
      fclose($fz); 
     } 

     // walk through $users, which contains the exploded contents 
     // of each line in users.txt 
     foreach ($users as $onematch) { 
      if (strpos($oneline[1], $onematch[1])) { 
       // now, the actual question: how to sort $oneline[4] 
       // as the requested example was not available at the 
       // time of writing, I assume 
       // it to be a string like: 'b,d,c,a' 

       // first, explode it into an array 
       $oneline[4] = explode(',', $oneline[4]); 
       // now sort it using the sort function of your liking 
       sort($oneline[4]); 
       // and implode the sorted array back into a string 
       $oneline[4] = implode(',', $oneline[4]); 

       echo $onematch[0], $oneline[4], '<br>'; 
      } 
     } 
    } 
} 
fclose($fp); 

我希望這不會冒犯你太多,只是試圖幫助,而不僅僅是提供手頭問題的解決方案。