【问题标题】:PHP CSV compare columnsPHP CSV 比较列
【发布时间】:2017-03-02 12:48:18
【问题描述】:

我创建了一个 CSV,如下所示:

Name,Title,Salary,Bonus
Bob White,Manager,50000,1000
Mia Sparrow,Programmer,60000,1500
Steven Seagull,Programmer,58000,1400

然后是下面的代码:

<?php
$row = 1;
$data = [];
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data[] = fgetcsv($handle)) !== FALSE) {
    }
    fclose($handle);
}
print_r($data);
?>

但不是这个输出:

[0] => Array
    (
        [0] => Name
        [1] => Title
        [2] => Salary
        [3] => Bonus
    )

[1] => Array
    (
        [0] => Bob White
        [1] => Manager
        [2] => 50000
        [3] => 1000
    )

[2] => Array
    (
        [0] => Mia Sparrow
        [1] => Programmer
        [2] => 60000
        [3] => 1500
    )

我在一行中得到所有内容:

Array ( [0] => Array ( [0] => ��NAME    TITLE   SALARY  BONUS ) [1] => Array ( [0] => BOB   MANAGER 50000   1000 ) [2] => Array ( [0] => MIA    PROGRAMMER  600001  1500 ) [3] => Array ( [0] => STEVEN PROGRAMMER 58000    1400 ) [4] => Array ( [0] => ) [5] => )

如何通过键将其拆分为数组以便我可以使用:

print_r(array_column($data,X));

打印我需要的列?

【问题讨论】:

  • 显示test.csv内容的片段
  • 如果你知道这些索引,就可以echo $data[$salaryColumnIndex]+$data[$bonusColumnIndex]
  • 如果我 echo $data[1] 也许,它会给我错误:未定义的偏移量:1

标签: php arrays csv


【解决方案1】:

当您循环遍历数组时,只需将与 salarybonus 对应的任何列相加,然后在最后输出总数。

如果你改变这个:

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

到:

$data = [];
while (($data[] = fgetcsv($handle, 1000, ",")) !== FALSE) {

你会在 $data 中得到文件的全部内容,然后你可以对其执行各种array operations

[编辑]

好的,这就是我在第一部分中要讨论的内容。假设您的 .csv 文件如下所示:

Name,Title,Salary,Bonus
Bob White,Manager,50000,1000
Mia Sparrow,Programmer,60000,1500
Steven Seagull,Programmer,58000,1400

现在,这将为您提供奖金和薪水列的总和,并将它们相加为总和:

const SALARY = 2;
const BONUS  = 3;

$salary = 0;
$bonus  = 0;

$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
      $salary+= $data[SALARY];
      $bonus+=  $data[BONUS];
    }
    fclose($handle);
    echo "Totals: ".$salary."+".$bonus." = ".($salary + $bonus);
}

如果你想对你的数据做一些其他的操作,你可以把整个东西存储在一个数组中,像这样:

$row = 1;
$data = [];
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data[] = fgetcsv($handle)) !== FALSE) {
    }
    fclose($handle);
}

现在,print_r($data); 会给你这个:

Array
(
    [0] => Array
        (
            [0] => Name
            [1] => Title
            [2] => Salary
            [3] => Bonus
        )

    [1] => Array
        (
            [0] => Bob White
            [1] => Manager
            [2] => 50000
            [3] => 1000
        )

    [2] => Array
        (
            [0] => Mia Sparrow
            [1] => Programmer
            [2] => 60000
            [3] => 1500
        )

    [3] => Array
        (
            [0] => Steven Seagull
            [1] => Programmer
            [2] => 58000
            [3] => 1250
        )

    [4] => 
)

print_r(array_column($data,2));会给你

Array
(
    [0] => Salary
    [1] => 50000
    [2] => 60000
    [3] => 58000
)

这有帮助吗?

【讨论】:

  • 我在上面尝试了你的代码,但它给了我一个错误:(!)注意:第 10 行 C:\wamp\www\code.php 中的数组到字符串转换谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多