2015-03-25 6 views
0

Я видел несколько подобных примеров, но он все еще не работает. Файл данных CSV «data1.csv», как показано ниже:PHP fgetcsv 2 мерный массив

symbol,num1,num2 
QCOM,10,100 
QCOM,20,200 
QCOM,30,300 
QCOM,40,400 
CTSH,10,111 
CTSH,20,222 
CTSH,30,333 
CTSH,40,444 
AAPL,10,11 
AAPL,20,22 
AAPL,30,33 
AAPL,40,44 

--end of file ---- 

$inputsymbol = QCOM ; // $inputsymbol will come from html.works fine. 

Я хочу, чтобы прочитать файл CSV и выборки строк, который соответствует символ = QCOM. и преобразовать его в массив $ data1 для построения линейной диаграммы для num1 и num2, как показано ниже.

$data1 = array ( 
array(10,100), 
array(20,200), 
array(30,300), 
array(40,400) 
); 

Примечание: 1. нет запятой в конце каждой строки csv в файле данных csv. 2. Несколько символов в одном файле. поэтому строки, соответствующие символам, только
должны быть включены в $ data1.

==============

soluition Марк решает эту проблему. Теперь, чтобы сделать доступ к данным быстрее (для очень большого файла csv), я (внешне) отформатировал те же данные, что и ниже. Вопрос в том, как он может автоматически извлекать заголовки, а затем для массива data1?

symbol,1/1/2015,1/2/2015,1/3/2015,1/4/2015 
QCOM,100,200,300,400 
CTSH,11,22,33,44 
AAPL,10,11,12,13 

Обратите внимание, что количество полей в заголовке не фиксировано. (он будет увеличиваться каждый месяц). Но данные также будут соответствующим образом учтены.

+0

В чем ваш вопрос? –

+0

Я хочу преобразовать его в массив $ data1, как показано выше. Решение – user2188923

+0

Mark решает первую часть проблемы. Я задаю еще один вопрос, чтобы решить несколько другую проблему. – user2188923

ответ

0

Не сложно:

$inputsymbol = 'QCOM'; 

$data1 = []; 
$fh = fopen("data1.csv", "r")); 
while (($data = fgetcsv($fh, 1024)) !== FALSE) { 
    if ($data[0] == $inputsymbol) { 
     unset($data[0]); 
     $data1[] = $data; 
    } 
} 
fclose($fh); 

Итак, где именно вы имея проблему?

+0

$ data1 = []; // эта строка дает ошибку – user2188923

+0

Затем расскажите, какую версию PHP вы используете, поскольку вы, очевидно, используете неподдерживаемую версию; потому что синтаксис короткого массива PHP был представлен в PHP 5.4. –

+0

Заменить '$ data1 = [];' с '$ data1 = array();' для версий PHP, которые больше не поддерживаются –