【发布时间】:2017-05-13 15:26:19
【问题描述】:
我有一个 CSV 文件,其中包含我需要作为关联数组的列和行中的标题,而我在 SO 上尝试过的示例对我不起作用。
我找到的最接近的例子是CSV to Associative Array,但我无法打印数据,所以我一定遗漏了一些东西。
任何帮助将不胜感激
$all_rows = array();
$header = 1;//null; // has header
if (($handle = fopen($csv_file, "r")) !== FALSE) {
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($header === null) {
$header = $row;
continue;
}
$all_rows[] = array_combine($header, $row);
}
fclose($handle);
}
// CSV Example
// [FOOD][IN_Stock][On_Order]
// [Apples][1302][2304]
// [Oranges][4356][335]
foreach ($all_rows as $key => $value) {
// This prints ok based on the row number
echo $all_rows[$key]['Instock'];
// But i need to be able to call data based on the Food Type
echo $all_rows['Apples']['In_Stock'];
echo $all_rows['Apples']['On_order'];
echo $all_rows['Oranges']['In_Stock'];
echo $all_rows['Oranges']['On_order'];
}
我可以通过调用行号来打印数据,但是数据并不总是相同的,因此需要根据第一列的标题进行打印。
按要求添加打印的数组:
Array
(
[0] => Array
(
[Food] => Apples
[In_Stock] => 6329
[On_Order] => 375
)
[1] => Array
(
[Food] => Pears
[In_Stock] => 3329
[On_Order] => 275
)
[2] => Array
(
[Food] => Oranges
[In_Stock] => 629
[On_Order] => 170
)
)
装其他人需要它,这是我用的:
$csv = array();
foreach ($all_rows as $row) {
if($row) {
foreach($row as $key => $val) {
$csv[$val]['In_Stock'] = $row["In_Stock"];
$csv[$val]['On_order'] = $row["On_order"];
}
}
}
【问题讨论】:
-
在这里显示 print_r($all_rows)
-
print_r($header)
-
Array ([0] => Food [1] => In_Stock [2] => On_Order )
标签: php arrays csv multidimensional-array associative-array