Таким образом, у меня есть файл CSV, который похож на это:
12345, Here is some text
20394, Here is some more text
Как я могу вставить это в массив, который похож так
$text = "12345" => "Here is some text",
"20394" => "Here is some more text";
Это - то, что я в настоящее время должен был получать единственное числовое основанное значение на одном уровне CSV
if ($handle = fopen("$qid", "r")) {
$csvData = file_get_contents($qid);
$csvDelim = "\r";
$qid = array();
$qid = str_getcsv($csvData, $csvDelim);
} else {
die("Could not open CSV file.");
}
Спасибо за ответы, но я все еще вижу потенциальную проблему. С этими решениями, не был бы хранилище значений таким образом:
$array[0] = 12345
$array[1] = Here is some text 20394
$array[2] = Here is some more text
Если бы я попробовал это на примере csv выше, как массив был бы структурирован?
Вы можете использовать fgetcsv ()
для чтения строки из файла в массив. Примерно так:
$a = array();
$f = fopen(....);
while ($line = fgetcsv($f))
{
$key = array_shift($line);
$a[$key] = $line;
}
fclose($f);
var_dump($a);
Если вы читаете файл, я могу порекомендовать использовать что-то вроде fgetcsv (). Это прочитает каждую строку в CSV в массив, содержащий все столбцы как значения.
$csv_lines = explode('\n',$csv_text);
foreach($csv_lines as $line) {
$csv_array[] = explode(',',$line,1);
}
редактировать - на основе кода, опубликованного после исходного вопроса:
if ($handle = fopen("$qid", "r")) {
$csvData = file_get_contents($qid);
$csvDelim = "\r"; // assume this is the line delim?
$csv_lines = explode($csvDelim,$csvData);
foreach($csv_lines as $line) {
$qid[] = explode(',',$line,1);
}
} else {
die("Could not open CSV file.");
}
В вашем новом файле с двумя столбцами $ qid должен стать массивом с двумя значениями для каждой строки.
$csvDelim = ",";
$qid = str_getcsv($csvData, $csvDelim);
$text[$qid[0]] = $qid[1];