【问题标题】:Processing multidimensional csv-originated arrays in PHP在 PHP 中处理多维 csv 起源的数组
【发布时间】:2015-08-17 14:17:26
【问题描述】:

在每一行的第一列中都有一个职位,即软件工程师,如果用户的职位与该行中的职位匹配,如果给定的 id 存在于 csv 中,则嵌套的 for 循环应检查该行的每一列该列的字符串。我在 PHP 中使用数组的工作不多,而且我在多维数组方面的大部分经验都在 Java 中,所以请原谅我以 Java 为主题的 PHP 代码:

$csv = read_csv('/filepath/tct.csv');
$csv_rows = 75;
for($i=1;$i<$csv_rows;$i++)
{
    if(strtolower($user['user_pos']) == strtolower($csv[$i][0]))
    {
        for($j=1;j<sizeof($csv[$i]);j++)
        {
            if(array_search($user['id'], explode(",",$csv[$i][$j])))
            {
                return true;
            }
        }
    }
}

不幸的是,我的 java 似乎无法正常工作,所有关于 PHP 多维数组的现有问题只会让我对 $key->$value 的讨论感到困惑。任何人都可以向我解释我需要做些什么调整才能使其正常工作吗?

【问题讨论】:

  • $key 是数组的索引,$value 是给定索引的值。
  • 我不知道它是否会帮助你,但 PHP 数组开始像 Java 一样为 0。您所有的 for 循环都开始为 1。我认为您应该执行 for($i=1;$i&lt;=$csv_rows;$i++)for($i=0;$i&lt;$csv_rows;$i++)
  • 我认为我可以从 1 开始,因为行的第一列中永远不会有 id 值(位置在那里)。至少,这是我的想法……我可能是错的。
  • 如果你有 10 条记录,在 PHP 中,要遍历从 0 到 9 开始的所有元素。所以你可以做$i=0 to $i&lt;10$i=1 to $i&lt;=10。请注意&lt;=,因为您似乎在每个循环中都缺少一个元素。我不知道你是否明白我的意思。您可以从 1 开始,但缺少一个元素,因为 &lt;10 给您 9(因为整数)
  • 我明白这一点。如果我没记错的话,每行 [0] 应该 中的第一个值是一个位置(根据 csv 的格式),这在我的初始条件之外是无关紧要的.我只想检查该行中的 [1] 列及以后的列。

标签: php arrays csv multidimensional-array


【解决方案1】:

因此,在处理多维数组时,我所做的是完全可以接受的(就功能而言),我只是忽略了在内循环中两次将 $ 放在 j 之前。

到目前为止我发现的最有效和最容易理解的方法是:

foreach($csv as $csv_row) {
    for($i=1;$i<count($csv_row);$i++) {
        //do something with $csv_row[$i]
    }
}

嵌套 for 循环的标准问题是确保行名不会被迭代,因为我总是在 column[0] 处有行名(尽管外部 foreach 将循环遍历第 0 行中的列名)

当然,这在很大程度上依赖于使用相同电子表格/csv 布局的人。如果它只是数据的 csv,我确信内部循环可以更改为:

foreach($csv_row as $csv_col {
    //do something with $csv_col
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2019-08-22
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多