【问题标题】:From csv to multidimensional array (php)从 csv 到多维数组 (php)
【发布时间】:2016-08-24 15:49:04
【问题描述】:

我想从:

A,A,A,A
A,A,A,B
A,A,B,A
A,A,B,B
A,B,A,A
A,B,A,B
A,B,B,A
A,B,B,B
B,A,A,A
B,A,A,B
B,A,B,A
B,A,B,B
B,B,A,A
B,B,A,B
B,B,B,A
B,B,B,B

到:

Array (
[A] => Array
    (
    [A] => Array
        (
        [A] => Array
            (
            [A] => A,
            [B] => B
        [B] => Array
            (
            [A] => A,
            [B] => B
    [B] => Array
        (
        [A] => Array
            (
            [A] => A,
            [B] => B
        [B] => Array
            (
            [A] => A,
            [B] => B
[B] => Array
    (
    [A] => Array
        (
        [A] => Array
            (
            [A] => A,
            [B] => B
        [B] => Array
            (
            [A] => A,
            [B] => B
    [B] => Array
        (
        [A] => Array
            (
            [A] => A,
            [B] => B
        [B] => Array
            (
            [A] => A,
            [B] => B

【问题讨论】:

  • 那么这种转变背后的逻辑是什么?
  • 是的,我刚刚注意到第一位中的 A 的数量与数组不匹配。还可以使用代码格式使该数组更易于阅读。
  • 您应该提供该数组的构建方式,然后提供显示您尝试过的代码。
  • 起始列表仅显示从 0000 到 1111 的二进制计数,其中 0 1 被 A 和 B 替换。利用这一事实,您可以更简单地重现数据。
  • 你是放弃还是什么?

标签: php arrays csv


【解决方案1】:

我可能会后悔,但我很无聊。假设您有一个 CSV 文件,如果没有,那么只是 explode() \n 上的 CSV 字符串或其他:

$lines = file('/path/to/csv.txt');

$array = array();

foreach($lines as $line) {
    $temp  = &$array;

    $path  = str_getcsv($line);
    $value = array_pop($path);

    foreach($path as $key) {
        $temp =& $temp[$key];
    }
    $temp[$value] = $value;
}

print_r($array);

【讨论】:

  • 我可能会后悔那你为什么要发布它?
  • 有可能我不会 ;-) 最坏的情况我会删除它。
  • 还有一个变化,有些人并没有真正看到你对那里的引用做了什么,所以你可能想解释一下+你的答案不包含array_column:P
  • @Rizier123 是 PHP 的“不够的 array_column”还是“不够的 jquery”?
【解决方案2】:

您可以通过换行符将字符串转换为行数组。

然后循环遍历行并以逗号分隔。您想要的多维数组将通过使用 CSV 行中的每个值作为结果中较低级别的键来实现。

foreach (explode("\n", $csv_str) as $row) {
    $row = explode(',', $row);
    $result[$row[0]][$row[1]][$row[2]][$row[3]] = $row[3];
}

【讨论】:

  • 如果 CSV 始终是已知的列数,在本例中为 4,那就太好了。
  • 谢谢!好吧,它仍然有点适用于超过四列的 CSV,它会忽略其余的列。但是,是的,少于四个是不行的。
猜你喜欢
  • 2017-03-02
  • 1970-01-01
  • 2017-08-28
  • 2023-03-25
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
相关资源
最近更新 更多