2016-01-21 41 views
0

調試看起來像是一個簡單的問題,我擔心這個模塊可能有問題,我忽略了它的簡單性:解析PHP數組時遇到不正確的重複問題

function sendUploads(array $files) 
{ 
    $fileCount = count($files)-1; 
    $lastFile = false; 

    foreach ($files as $fileKey => $file) { 

     if ($fileKey == $fileCount) { 
       $file = $file . ' is the lastfile'; 
     } 

     $uploads[] = $file; 

    }  
    var_dump($uploads); 
} 

$files = array('file1', 'file2', 'file3', 'file4', 'file5'); 

sendUploads($files); 

預期的結果將是:

array(5) { 
     [0] => 
     string(5) "file1" 
     [1] => 
     string(5) "file2" 
     [2] => 
     string(5) "file3" 
     [3] => 
     string(5) "file4" 
     [4] => 
     string(21) "file5 is the lastfile" 
    } 

但在某些邊緣情況,我們看到這樣的結果,而不是:

array(5) { 
     [0] => 
     string(5) "file1" 
     [1] => 
     string(5) "file2" 
     [2] => 
     string(5) "file3" 
     [3] => 
     string(5) "file4" 
     [4] => 
     string(21) "file5 is the lastfile" 
     [5] => 
     string(21) "file5 is the lastfile" 
    } 

在我所有的測試中,我都得到了第一個結果,但是有一個潛在的情況我錯過了這個函數可能導致這個問題的地方?

謝謝你的時間。

+0

第二個例子是不可能的,你發佈的代碼。請粘貼完整或實際的代碼。 – Daan

+0

「在一些邊緣情況下」這些情況具體是什麼? –

+2

根本看不到這是可能的。 foreach()不會因爲它的頭髮日不好而神奇地重複一次額外的時間。 –

回答

1

我不知道這些邊緣情況應該如何可能。但無論如何,你正在做一個案例的n-1 if比較。你爲什麼不只是end它並自行管理它?

function sendUploads(array $files) 
{ 
    $length = count($files); 
    if ($length < 1) 
    return array(); 

    $uploads = array(); 
    $last = end($files); 
    for ($i=0; $i<($length-2); $i++) { 
    $uploads[] = $files[$i]; 
    } 
    $uploads[] = $last . " is the last file"; 

    return $uploads; 
} 
+0

根本不需要修改數組。 [end()](http://php.net/end)也可以。 –

+0

@MarcB當然,謝謝你的建議 – kero

0

也許就一個主題的變化,但它最初似乎過於複雜:

function sendUploads($files=array()){ 
    if(empty($files)) return false; 
    $pop=array_pop($files); 
    $uploads=$files; 
    $uploads[]=$pop.' is the last file'; 
    return $uploads; 
} 
$files = array('file1', 'file2', 'file3', 'file4', 'file5'); 
if(!empty($files)) var_dump(sendUploads($files)); 
0

您提供永遠不會產生你已經包括了輸出的代碼。我認爲你的代碼真的比這個複雜得多,你已經刪除了你認爲不必要的東西。問題可能是由於PHP中的所有數組都是關聯的 - 即使索引是整數值。它很可能有一個數組,密鑰{-1,0,1,「banana」,300}。期望這樣的哈希映射具有明確的順序似乎是可達到的。

我能想到的(kingkero的是比較純的)最簡單的解決辦法是:

function sendUploads(array $origfiles) 
{ 
    $fileCount = count($files)-1; 
    $lastFile = false; 
    $files=array_values($origfiles); 
    // or if this still causes pain sort(array_values($origfiles)) 

    foreach ($files as $fileKey => $file) { 
     if ($fileKey == $fileCount) { 
      $file = $file . ' is the lastfile'; 
     } 
     $uploads[] = $file; 

    }  
    var_dump($uploads); 
}