从CSV到多维数组(PHP)

问题描述:

我想从去:从CSV到多维数组(PHP)

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 
+4

那么这种转变背后的逻辑是什么? –

+0

是的,我刚刚注意到第一位中的A的数量与数组不匹配。也可以使用代码格式来使该数组更容易阅读。 –

+0

你应该提供一个这个数组是如何构建的,然后提供显示你所尝试的代码。 – nerdlyist

我也许会后悔,但我觉得很无聊。假设你有一个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); 
+0

*我可能会后悔*那么你为什么发布它? – Rizier123

+0

有机会,我不会;-)最坏的情况下,我删除它。 – AbraCadaver

+0

也有一个变化,有些人并不真正看到你在那里做什么,所以你可能想解释一下,你的答案中不包含'array_column':P – Rizier123

您可以将字符串通过分裂在换行转换成排的阵列。

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

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

不错,如果CSV总是已知列数,在这种情况下4. – AbraCadaver

+0

谢谢!那么,对于超过四列的CSV,它仍然会工作,它会忽略其余部分。但是,只有不到四个人会成为nokay。 –