我有一个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
)
)
Encase其他人需要它,这就是我使用的:
$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"];
}
}
}
答案 0 :(得分:0)
试试这个,
foreach ($all_rows as $key => $value) {
echo $value['food'] . "\n";
echo $value['In_Stock'] . "\n"
}
答案 1 :(得分:0)
您需要第二个foreach
来实现您想要的目标。
这样的事情:
foreach ($all_rows as $row) {
if($row) {
foreach($row as $key => $val) {
if($key == "Food" && $val == "Apples") {
echo "Apples: " . "<br>";
echo $row["In_Stock"] . "<br>";
echo $row["On_order"] . "<br>";
}
else if($key == "Food" && $val == "Oranges") {
echo "Oranges: " . "<br>";
echo $row["In_Stock"] . "<br>";
echo $row["On_order"] . "<br>";
}
}
}
}
如果您只想打印页面上的值,可以这样做。
但是我已经提到过根据食物类型调用值,你可以创建一个函数。
答案 2 :(得分:0)
我认为你正在考虑具体。根据您的建议要求,如果您决定出售土豆会发生什么。您必须修改所有代码。
您需要更改的是打印循环。
所以使用这个csv文件
FOOD,IN_Stock,On_Order
Apples,1302,2304
Oranges,4356,335
你会得到
$csv_file = 'file.csv';
$all_rows = array();
$header = null;//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);
}
print_r($all_rows);
foreach ($all_rows as $stock_item) {
foreach ($stock_item as $key => $val){
if ( $key == 'FOOD') {
echo sprintf("\n%s", $val);
} else {
echo sprintf(' %s = %s', $key, $val);
}
}
}
结果将是
Apples IN_Stock = 1302 On_Order = 2304
Oranges IN_Stock = 4356 On_Order = 335
如果你然后将土豆添加到csv
FOOD,IN_Stock,On_Order
Apples,1302,2304
Oranges,4356,335
Potatoes,3333,999
没有更改代码,您的输出将是
Apples IN_Stock = 1302 On_Order = 2304
Oranges IN_Stock = 4356 On_Order = 335
Potatoes IN_Stock = 3333 On_Order = 999
当然,您可能希望以不同方式格式化输出。