Проблема PHP с использованием fgetcsv, а затем foreach

Хорошо, вот в чем дело.

if (!$fp=fopen($file,"r")) echo "The file could not be opened.<br/>";  
            while (( $data = fgetcsv ( $fp , 1000 , ',')) !== FALSE ) {
                // here, var_dump($data); shows the correct array
                $i = 0; 
                foreach ($data as $i=>$row ) {  
                   $matrix=explode( ',', $row);
                   // $matrix recieves only the first field of the csv line
                   // seems like I'm getting a field on each foreach iteration
                   // shouldn't I get the whole line each time?
                } //end foreach
            } //end while

Я не вижу здесь проблемы. Кстати, этот код работает на моей локальной машине и не работает на моем сервере. Обе версии Linux и php одинаковы.

Какие-нибудь мысли? Спасибо.


person gomman    schedule 07.09.2012    source источник
comment
У вас есть сообщения об ошибках? У вас есть права на чтение этого файла?   -  person Lix    schedule 07.09.2012
comment
отчеты об ошибках включены, и у меня есть правильные права на чтение файла. в любом случае, у меня нет ошибок, и я действительно читаю файл, но для каждой итерации я получаю поле, когда я думаю, что должен получить строку. Это моя проблема. Спасибо.   -  person gomman    schedule 07.09.2012
comment
Вы уверены, что разделителем является запятая, а не точка с запятой (;)? Также вы можете попробовать установить ограничение на 0.   -  person martincho    schedule 07.09.2012
comment
короткие строки, разделенные запятой. пробовал оба, не повезло. Спасибо.   -  person gomman    schedule 07.09.2012


Ответы (1)


fgetscv() возвращает каждую строку в виде массива. Итак, ваша проблема заключается в следующем:

$data — это строка, которая уже является массивом. Каждая итерация в цикле while() будет возвращать строку. Нет необходимости во взрыве.

$allRowsAsArray = array();
if (!$fp=fopen($file,"r")) echo "The file could not be opened.<br/>";  
while (( $data = fgetcsv ( $fp , 1000 , ',')) !== FALSE ) 
{
    $allRowsAsArray[] = $data;
}
print_r($allRowsAsArray); //Will return your entire csv as an array of rows, each row as an array.
person Layton Everson    schedule 07.09.2012
comment
Ну, это было НАСТОЛЬКО легко. Я не знаю, что на меня нашло, когда я пытался использовать этот злой код. Большое спасибо. - person gomman; 07.09.2012