PHP CSV到具有行标题的关联数组
我有一个CSV文件,列和行中都有标题,这是我作为关联数组所需要的,我尝试过的示例对我来说并不适用 我找到的最接近的例子是,但我无法打印数据,所以我肯定遗漏了什么 任何帮助都将不胜感激PHP CSV到具有行标题的关联数组,php,arrays,csv,multidimensional-array,associative-array,Php,Arrays,Csv,Multidimensional Array,Associative Array,我有一个CSV文件,列和行中都有标题,这是我作为关联数组所需要的,我尝试过的示例对我来说并不适用 我找到的最接近的例子是,但我无法打印数据,所以我肯定遗漏了什么 任何帮助都将不胜感激 $all_rows = array(); $header = 1;//null; // has header if (($handle = fopen($csv_file, "r")) !== FALSE) { while (($row = fgetcsv($handle, 1000, ",")) !==
$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"];
}
}
}
试试这个
foreach ($all_rows as $key => $value) {
echo $value['food'] . "\n";
echo $value['In_Stock'] . "\n"
}
您需要第二个
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>";
}
}
}
}
foreach($row为所有行){
如果($行){
foreach($key=>$val的行){
如果($key==“Food”&&$val==“Apples”){
回声“苹果:”
“;
echo$行[“库存”]。“
”;
echo$row[“按订单”]。“
”;
}
如果($key==“Food”和&$val==“Oranges”){
回声“橙子:”
”;
echo$行[“库存”]。“
”;
echo$row[“按订单”]。“
”;
}
}
}
}
如果您只想打印页面上的值,这可以做到
但我想既然你提到了只调用基于食物类型的值,你就可以从中创建一个函数。我想你是在考虑具体地调用它。根据您的建议要求,如果您决定出售土豆,会发生什么情况。你必须修改你所有的代码 您需要更改的是打印循环 所以使用这个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
Apples IN_Stock = 1302 On_Order = 2304
Oranges IN_Stock = 4356 On_Order = 335
Potatoes IN_Stock = 3333 On_Order = 999
如果你在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
Apples IN_Stock = 1302 On_Order = 2304
Oranges IN_Stock = 4356 On_Order = 335
Potatoes IN_Stock = 3333 On_Order = 999
当然,您可能希望以不同的格式输出。在此处显示打印($all_行)打印($header)数组([0]=>食品[1]=>库存[2]=>订购)OP为什么要“尝试此代码”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。这让我很接近,只是对它进行了一点修改,以填充所有的“食物”:$csv=array();foreach($row为所有行){if($row){foreach($row为$key=>$val){$csv[$val]['In_Stock']=$row[“In_Stock”];$csv[$val]['On_order']=$row[“On_order”];}}@JamesParry Cool!很高兴它有帮助!