php okuma ve biçimlendirme csv patlayabilir kullanarak veri ve diziler

5 Cevap

The Objective

Csv dosyasını okumak ve bir diziye her satırı ayrı. İlk satır (alan adları) kalan veri döngü sonra bir kez görüntülenir, ve.

Ben csv dosyasını açmak ve patlamaya bu işlevi var

$myFile = "csv.csv";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
$csv = explode(",", $theData);

Bu, söz konusu CSV dosyası

id,sub,type,regprice,natprice
1,4,Team,40,75
2,4,Individual,15,35
3,4,Stunt Group,50,150
4,4,Coed Partner Stunt,50,150

I yapmak için nasıl bilmeniz gerekenler, aşağıdaki şekilde kalan diziler aracılığıyla döngü sonra, ayrı bir diziye ilk hat yük olduğunu.

Array[0][0] - Array[0][1] - Array[0][2] - Array[0][3] - Array[0][4]
-------------------------------------------------------------------
Array[1][0] - Array[1][1] - Array[1][2] - Array[1][3] - Array[1][4]
Array[2][0] - Array[2][1] - Array[2][2] - Array[2][3] - Array[2][4]
Array[3][0] - Array[3][1] - Array[3][2] - Array[3][3] - Array[3][4]
Array[4][0] - Array[4][1] - Array[4][2] - Array[4][3] - Array[4][4]

5 Cevap

Ben bu işe bulundu

Ben CSV satırların sonunda bir / ekledi.

$myFile = "csv.csv";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
$csvpre = explode("/", $theData);
$i = 1;
    foreach ( $csvpre AS $key => $value){
    	$info = explode(",", $value);    
    		if($i == "1"){
    			echo "$info[0] - $info[1] - $info[2] - $info[3] - $info[4]<br>";
    			$i++;
    			} else {
    			echo "<span style=\"color:#ff0000;\">$info[0] - $info[1] - $info[2] - $info[3] - $info[4]</span><br>";
    		}		
    }

Bu deneyin:

foreach ($csv as $i=>$row) {
  $rowStr = implode(' - ',$row)."\n";
  print($rowStr);
  if ($i == 0) {
    print(str_repeat('-',strlen($rowStr))."\n");
  }
}

Düzenleme: Sabit sözdizimi hatası.

<?php
$myFile = "csv.csv";
$fh = fopen($myFile, 'r');
$headers = fgetcsv($fh);
$data = array();
while (! feof($fh))
{
    $row = fgetcsv($fh);
    if (!empty($row))
    {
        $obj = new stdClass;
        foreach ($row as $i => $value)
        {
            $key = $headers[$i];
            $obj->$key = $value;
        }
        $data[] = $obj;
    }
}
fclose($fh);
print_r($data);
?>

Bu irade çıktı:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [sub] => 4
            [type] => Team
            [regprice] => 40
            [natprice] => 75
        )

    [1] => stdClass Object
        (
            [id] => 2
            [sub] => 4
            [type] => Individual
            [regprice] => 15
            [natprice] => 35
        )

    [2] => stdClass Object
        (
            [id] => 3
            [sub] => 4
            [type] => Stunt Group
            [regprice] => 50
            [natprice] => 150
        )

    [3] => stdClass Object
        (
            [id] => 4
            [sub] => 4
            [type] => Coed Partner Stunt
            [regprice] => 50
            [natprice] => 150
        )

)
$file_array=file('csv.csv');
$lines=count($file_array);

$first_line=explode(',',$file_array[0]);
$fl_text=implode(' - ',$first_line);    
echo $fl_text.'<br>';

for($i=1;$i<$lines;$i++)
   {
   $line_text=str_replace(',',' - ',$file_array[$i]);
   echo '<span style="color:#ff0000;">'.$line_text.'</span><br>';
   }

Bu, her biri patlamaya gerek kalmadan satırları yazdırmak için birkaç yol bulunmaktadır. Sen str_replace kullanarak bir alan ',' yerine, ya patlayabilir ve sonra implode olabilir. Muhtemelen daha verimli str_replace olduğunu.

Ayrıca, dosya () komutu bir dizideki değerleri bir dosyanın her satırı okur.