2014-02-05 71 views
0

我有一個問題,我無法解釋自己。我認爲這可能是PHP或Laravel的錯誤 - 或者我正在做一些我不應該做的事情。即使索引存在,未定義的偏移量1仍然存在

我有一個國家代碼和國名

CSV file

我想讀的文件,並與數據種子我的數據庫.csv文件。 因此,我有以下代碼來獲取CSV到一個數組:

$csv = public_path() . "/assets/countries.csv"; 
    if(File::exists($csv)) { 
    $content = File::get($csv); 
    $lines = array(); 
    $lines = explode("\n", $content); 

    for($i=0; $i<sizeof($lines);$i++) { 
     $line = $lines[$i]; 
     $line = explode(",",$line); 
     $lines[$i] = $line; 
    } 
} 

到目前爲止好,我的$線陣列現在已經全部與各自與2個索引代碼的數組,0值和1爲國名。

做的foreach($線爲$線)和VAR傾銷$線,我得到:

array(2) { [0]=> string(2) "AF" [1]=> string(12) "Afghanistan " } 
..... 

對於每個條目。但是,現在會發生以下情況:

echo $line[0]; // output: AF 
echo $line[1]; // undefined offset 1 error 

我試圖檢查1是一個字符串索引或什麼那麼,請看下面的代碼+輸出:

foreach($lines as $line) { 
    var_dump($line); 
    echo 'array_key_exists(1, $line): '; 
    var_dump(array_key_exists(1, $line)); 
    foreach($line as $key => $col) { 
     echo 'var_dump($key): '; 
     var_dump($key); 
     echo '$col: ' . $col; 
     echo '$line[$key]: ' . $line[$key]; 
    } 
} 

(我刪除了一些呼應減免可讀性) 的代碼產生以下輸出(對於第一個結果和類似的其他所有:)

array(2) { [0]=> string(2) "AF" [1]=> string(12) "Afghanistan " } 
array_key_exists(1, $line): bool(true) 

var_dump($key): int(0) 
$col: AF 
$line[$key]: AFvar_dump($key): int(1) 
$col: Afghanistan 
$line[$key]: Afghanistan 

哪有array_key_exists(1, $line)結果如此,但$line[1]在未定義的偏移量中:1錯誤?謝謝你的幫助。

編輯:$line[$key]正在工作,而$line[1]不是。在這種情況下var_dump(1 == $ key)導致bool(true)...

EDIT2:如果我沒有使用laravel(file_get_contents然後)具有相同的代碼 - 我沒有收到錯誤。見this fiddle for the code

+0

你能爲它創建一個快速的在線小提琴嗎? – Rikesh

+0

我想你應該重申這個問題,因爲它與Laravel無關。 – warspite

+0

http://phpfiddle.org/lite/code/cvf-1kp –

回答

1

我很蠢。感謝來自laravel.io的人,我意識到錯誤既不在PHP也不在Laravel中,但在我的數據中。

.csv文件中有空的最後一行。該文件無法分解,導致$lines[249](最後一項)中只有一個值。

我爲此找藉口。