您的位置:首页 > 编程语言 > PHP开发

php csv to array (csv 转数组)

2011-11-29 22:45 351 查看


php csv to array (csv 转数组)

1. 使用类

注意: user.csv 第一行默认为数组的键, 且第一行不会被打印; (区别于下面的普通函数方法)

例如:

nameagegender
zhang23male
li20female
结果:

Php代码



Array

(

[0] => Array

(

[name] => zhang

[age] => 23

[gender] => male

)

[1] => Array

(

[name] => li

[age] => 20

[gender] => female

)

)

回到正题:

Php代码



<?php

class csv_to_array{

private $counter;

private $handler;

private $length;

private $file;

private $seprator;

private $csvData = array();

function __construct($file = "", $length = 1000, $seprator = ','){

$this->counter = 0;

$this->length = $length;

$this->file = $file;

$this->seprator = $seprator;

$this->handler = fopen($this->file, "r");

}

function get_array(){

$getCsvArr = array();

$csvDataArr = array();

while(($data = fgetcsv($this->handler, $this->length, $this->seprator)) != FALSE){

$num = count($data);

$getCsvArr[$this->counter] = $data;

$this->counter++;

}

if(count($getCsvArr) > 0){

$csvDataArr = array_shift($getCsvArr);

$counter = 0;

foreach($getCsvArr as $csvValue){

$totalRec = count($csvValue);

for($i = 0; $i < $totalRec ; $i++) $this->csvData[$counter][$csvDataArr[$i]] = $csvValue[$i];

$counter++;

}

}

return $this->csvData;

}

function __destruct(){

fclose($this->handler);

}

}

// example:

$csv = new csv_to_array('user.csv');

echo "<pre>"; print_r($csv->get_array()); echo "</pre>";

2. 使用一般函数

Php代码



<?

function csv_to_array($csv)

{

$len = strlen($csv);

$table = array();

$cur_row = array();

$cur_val = "";

$state = "first item";

for ($i = 0; $i < $len; $i++)

{

//sleep(1000);

$ch = substr($csv,$i,1);

if ($state == "first item")

{

if ($ch == '"') $state = "we're quoted hea";

elseif ($ch == ",") //empty

{

$cur_row[] = ""; //done with first one

$cur_val = "";

$state = "first item";

}

elseif ($ch == "\n")

{

$cur_row[] = $cur_val;

$table[] = $cur_row;

$cur_row = array();

$cur_val = "";

$state = "first item";

}

elseif ($ch == "\r") $state = "wait for a line feed, if so close out row!";

else

{

$cur_val .= $ch;

$state = "gather not quote";

}

}

elseif ($state == "we're quoted hea")

{

if ($ch == '"') $state = "potential end quote found";

else $cur_val .= $ch;

}

elseif ($state == "potential end quote found")

{

if ($ch == '"')

{

$cur_val .= '"';

$state = "we're quoted hea";

}

elseif ($ch == ',')

{

$cur_row[] = $cur_val;

$cur_val = "";

$state = "first item";

}

elseif ($ch == "\n")

{

$cur_row[] = $cur_val;

$table[] = $cur_row;

$cur_row = array();

$cur_val = "";

$state = "first item";

}

elseif ($ch == "\r") $state = "wait for a line feed, if so close out row!";

else

{

$cur_val .= $ch;

$state = "we're quoted hea";

}

}

elseif ($state == "wait for a line feed, if so close out row!")

{

if ($ch == "\n")

{

$cur_row[] = $cur_val;

$cur_val = "";

$table[] = $cur_row;

$cur_row = array();

$state = "first item";

}

else

{

$cur_row[] = $cur_val;

$table[] = $cur_row;

$cur_row = array();

$cur_val = $ch;

$state = "gather not quote";

}

}

elseif ($state == "gather not quote")

{

if ($ch == ",")

{

$cur_row[] = $cur_val;

$cur_val = "";

$state = "first item";

}

elseif ($ch == "\n")

{

$cur_row[] = $cur_val;

$table[] = $cur_row;

$cur_row = array();

$cur_val = "";

$state = "first item";

}

elseif ($ch == "\r") $state = "wait for a line feed, if so close out row!";

else $cur_val .= $ch;

}

}

return $table;

}

//pass a csv string, get a php array

// example:

$arr = csv_to_array(file_get_contents('user.csv'));

echo "<pre>"; print_r($arr); echo "</pre>"

或者

Php代码



<?

$arrCSV = array();

// Open the CSV

if (($handle = fopen("user.csv", "r")) !==FALSE) {

// Set the parent array key to 0

$key = 0;

// While there is data available loop through unlimited times (0) using separator (,)

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

// Count the total keys in each row

$c = count($data);

//Populate the array

for ($x=0;$x<$c;$x++) $arrCSV[$key][$x] = $data[$x];

$key++;

} // end while

// Close the CSV file

fclose($handle);

} // end if

echo "<pre>"; print_r($arrCSV); echo "</pre>";

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: