【问题标题】:Put csv contents into a muti dimension array将 csv 内容放入多维数组
【发布时间】:2014-01-08 23:57:39
【问题描述】:

我有一个包含以下行的 csv 文件

enter code here

23,cars,43 063
23,cars,17 306
23,houses,13 300
23,garage,13 094
23,hotels,10 025
22,cars,75 675
22,cars,40 403
22,houses,32 243
22,garage,30 649
22,hotels,29 734
21,hotels,29 734
22,hotels,29 734

这是我用来解析 csv 文件的代码

     function readCSV($csvFile){
$file_handle = fopen($csvFile, 'r');
while (!feof($file_handle) ) {
    $line_of_text[] = fgetcsv($file_handle, 1024);
}



fclose($file_handle);
return $line_of_text;




    }

当我显示 $line_of_text 的内容时;数组,这是我得到的

      Array
       (
      [0] => Array
      (
        [0] => 23
        [1] => cars
        [2] => 43 063
      )

[1] => Array
    (
        [0] => 23
        [1] => cars
        [2] => 17 306
    )

[2] => Array
    (
        [0] => 23
        [1] => houses
        [2] => 13 300
    )

.....

但这不是我想要的,我希望我的数组以这种方式显示

 array (
 23 => array(
    'cars' => 43063,
    'houses' => 17306,
    'shops' => 13300,
    'garages' => 13094,
    'hotels' => 10025
 ),
 22 => array(
    'cars' => 75675,
    'houses' => 40403,
    'shops' => 32243,
    'garages' => 30649,
    'hotels' => 29734,
    'test' => 29734
     )
    );

我如何做到这一点?你能帮帮我吗?

//更新新我的数组的内容

 Array
 (
 [0] => Array
    (
        [0] => cars
        [1] => 00
        [2] => 0
    )

[1] => Array
    (
        [0] => cars
        [1] => 01
        [2] => 0
    )

[2] => Array
    (
        [0] => cars
        [1] => 02
        [2] => 0
    )


[3] => Array
    (
        [0] => cars
        [1] => 11
        [2] => 0
    )

[4] => Array
    (
        [0] => cars
        [1] => 23
        [2] => 4425
    )

[5] => Array
    (
        [0] => houses
        [1] => 00
        [2] => 198
    )

[6] => Array
    (
        [0] => houses
        [1] => 01
        [2] => 742
    )

[7] => Array
    (
        [0] => houses
        [1] => 02
        [2] => 168
    )
)

【问题讨论】:

  • 您可以通过循环和构建新数组,或者通过原始循环和 fgetcsv($file_handle , 1024);
  • @skrilled,你有这方面的例子吗?我很喜欢新的 php

标签: php csv multidimensional-array


【解决方案1】:
$fp = fopen($csvFile, 'r');
$master = array();
while( $line = fgetcsv( $fp ) ) {
    // 23,cars,43 063
    if( !isset( $master[$line[0]] ) )
        $master[$line[0]] = array();

    if( !isset( $master[$line[0]][$line[1]] ) )
        $master[$line[0]][$line[1]] = 0;

    $n = filter_var($line[2], FILTER_SANITIZE_NUMBER_INT);
    $master[$line[0]][$line[1]] += $n;
}

var_dump( $master );

没有测试,但应该可以。如果您有任何问题,请告诉我。

【讨论】:

  • @Saeven,如何允许数组接受重复值?当我的阵列以这种方式排列时?我已经编辑了我原来的问题
  • 应该保留这个问题,然后为您的新问题开始一个新线程。提高了 SO 作为知识库的质量。请随时通过您的新问题主题向我发送消息。
【解决方案2】:

试试这样的!

$line_of_text=array();
while (!feof($file_handle) ) {
    $line = fgetcsv($file_handle, 1024);

    if(isset($line_of_text[ $line[0] ][ $line[1] ] ))
        $line_of_text[$line[0]][$line[1]]+=str_replace(" ", "", $line[2]);
    else
        $line_of_text[$line[0]][$line[1]]=str_replace(" ", "", $line[2]);

}

【讨论】:

  • 我尝试使用@Saeven 代码将数据插入到一个新的 csv 文件中,但我得到了数组中每个键的新行。这就是我在 csv 文件中插入数据时得到的结果 23,17306 23,13300 22,13094 22,10025 我希望每个键都有一行,值用“,”分隔,例如 23,17306 ,13300 22,13094,10025 我如何做到这一点?
猜你喜欢
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
相关资源
最近更新 更多