2017-01-26 4 views
0

Странное поведение при присвоении значений для массива. PHP-скрипт считывает файл csv и заполняет переменную массива значениями, считанными из файла.PHP: значения assigend для массива усекаются до первой буквы

Я положил эхо команду в цикле в то время как для того, чтобы увидеть первые 8 строк читаем:

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    // numero di elementi presenti nella riga letta 
    $num_elementi = count($data); if($nn<8) echo "<br>-- nn:".$nn; 
    // popolamento dell'array 
    for ($x=0; $x<$num_elementi; $x++) { 
     $csvarray[$nn][$x] = $data[$x]; if($nn<8) echo " - ".$csvarray[$nn][$x]; 
    } 
    $nn++; 
} 

Результат обрезается на первых символов:

> -- nn:0 - A - A - W - F - 1 - - 1 - 0 - - 0 
> -- nn:1 - A - A - W - F - 1 - 5 - 7 - 6 - 3 - 5 
> -- nn:2 - A - A - W - M - 3 - 4 - 3 - 1 - 2 - 1 
> -- nn:3 - A - A - W - M - 3 - 6 - 3 - 7 - 4 - 7 
> -- nn:4 - A - A - W - M - 1 - 3 - 1 - 7 - 2 - 7 
> -- nn:5 - A - A - W - M - 2 - 1 - 2 - 6 - 1 - 6 
> -- nn:6 - A - A - W - M - 3 - 3 - 3 - 8 - 1 - 8 
> -- nn:7 - A - A - W - F - 2 - 6 - 2 - 1 - 3 - 1 

Если я напечатать $ переменная данных (разница с предыдущим кодом является второй командой эхо)

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    // numero di elementi presenti nella riga letta 
    $num_elementi = count($data); if($nn<8) echo "<br>-- nn:".$nn; 
    // popolamento dell'array 
    for ($x=0; $x<$num_elementi; $x++) { 
     $csvarray[$nn][$x] = $data[$x]; if($nn<8) echo " - ".$data[$x]; 
    } 
    $nn++; 
} 

Я получаю правильный результат:

-- nn:0 - AFGHANISTAN - AFGHANISTAN - WIS GREY ROUTE - FIXED - 1 - - 1 - 0 - - 0 
-- nn:1 - AFGHANISTAN - AFGHANISTAN - WIS SARL - FIXED - 104 - 55.2599833333333 - 78 - 61 - 3315.599 - 59 
-- nn:2 - AFGHANISTAN - AFGHANISTAN AWCC MOBILE - WIS SARL - MOBILE - 36 - 48.57 - 32 - 10 - 2914.2 - 10 
-- nn:3 - AFGHANISTAN - AFGHANISTAN ETISALAT MOBILE - WIS SARL - MOBILE - 36 - 6.7854 - 36 - 7 - 407.124 - 7 
-- nn:4 - AFGHANISTAN - AFGHANISTAN MOBILE - WIS SARL - MOBILE - 16 - 37.5628333333333 - 14 - 7 - 2253.77 - 7 
-- nn:5 - AFGHANISTAN - AFGHANISTAN MTN MOBILE - WIS SARL - MOBILE - 26 - 16.7021166666667 - 26 - 6 - 1002.127 - 6 
-- nn:6 - AFGHANISTAN - AFGHANISTAN ROSHAN MOBILE - WIS SARL - MOBILE - 31 - 32.93085 - 30 - 8 - 1975.851 - 8 
-- nn:7 - ALBANIA - ALBANIA - WHITE LABEL (WIS) - FIXED - 2495 - 6269.08833333333 - 2451 - 1416 - 376145.3 - 1413 

Это просто задание, почему у меня разные результаты?

Поместите var_dump в csvarray в конце цикла:

echo "<br>VARDUMP = "; var_dump($csvarray[0]); 

Результат является:

VARDUMP=string(26) "AAWF1100omunicazioni SpA" 
+0

Вы можете сделать 'var_dump ($ csvarray)' после цикла, чтобы увидеть, что внутри? – webNeat

+0

Это не имеет смысла. '$ csvarray [$ nn] [$ x]' и '$ data [$ x]' - одно и то же. Вы просто устанавливаете '$ data [$ x]' равным '$ csvarray [$ nn] [$ x]' в предыдущем утверждении. –

+0

Я сделал редактирование с результатом var_dump –

ответ

0

В строке 6 вы должны использовать следующий код:

$csvarray[$nn][$x] = $data[$x]; if($nn<8) echo " - ".$csvarray[$nn]; 
0

Исправлена ​​инициализация массива $csvarray=Array(Array()) в начале кода. Массив используется до этого, он не пуст, когда я его снова использую.