2016-04-14 67 views
0

我想插入到基于csv上传文件的mysql中。所以,我需要将它们转换成insert_batch格式阵列笨象这样:从CSV导出错误的数组关联导入到mysql

$data = array(
    array(
      'title' => 'My title', 
      'name' => 'My Name', 
      'date' => 'My date' 
    ), 
    array(
      'title' => 'Another title', 
      'name' => 'Another Name', 
      'date' => 'Another date' 
    ) 
); 

$this->db->insert_batch('mytable', $data); 

的CSV这个样子(与标签分隔符),例如,只有两个记录

4 A B C D E F` 10.00 20.12 100 G H I 98 99 989 989 s d 0 0   0 0 0 0 
6 A B C D E G 10.00 20.12 100 G H I 98 99 989 989 s d 0 0   0 0 0 0 

我用这个库:Csvimport

我不熟悉使用火花,所以我只是把这个库放到应用程序/库中。

所以这是我的代码:

if (!empty($_FILES)) { 
     $config['upload_path'] = "./assets/uploads"; 
     $config['allowed_types'] = 'csv'; 

     $this->load->library('upload', $config); 

     if (!$this->upload->do_upload("file")) { 
      echo "File cannot be uploaded"; 
     } else { 
      $upload_data = $this->upload->data(); 
      $csv = $upload_data['full_path']; 

      /*USE DOWNLOADED LIBRARY*/  

      $this->load->library('csvimport'); 
      $tryOne = $this->csvimport->get_array($upload_data['full_path']); 

      echo "<pre>"; 
      print_r($tryOne); 

     } 
    } elseif ($this->input->post('file_to_remove')) { 
     $file_to_remove = $this->input->post('file_to_remove'); 
     unlink("./assets/uploads/" . $file_to_remove); 
    } else { 
     $this->listFiles(); 
    } 

结果是这样的:

Array 
(
[0] => Array 
    (
     [4] => 6 
     [A] => A 
     [B] => B 
     [C] => C 
     [D] => D 
     [E] => E 
     [F`] => G 
     [10.00] => 10.00 
     [20.12] => 20.12 
     [100] => 100 
     [G] => G 
     [H] => H 
     [I] => I 
     [98] => 98 
     [99] => 99 
     [989] => 989 
     [s] => s 
     [d] => d 
     [0] => 0 
     [] => 
    ) 

这是问题,任何解决方案.. 感谢您的解决方案,

现在我得到这样的阵列:

Array 
(
[0] => Array 
    (
     [0] => 4 
     [1] => A 
     [2] => B 
     [3] => C 
     [4] => D 
     [5] => E 
     [6] => F` 
     [7] => 10.00 
     [8] => 20.12 
     [9] => 100 
     [10] => G 
     [11] => H 
     [12] => I 
     [13] => 98 
     [14] => 99 
     [15] => 989 
     [16] => 989 
     [17] => s 
     [18] => d 
     [19] => 0 
     [20] => 0 
     [21] => 
     [22] => 
     [23] => 0 
     [24] => 0 
     [25] => 0 
     [26] => 0 
    ) 

[1] => Array 
    (
     [0] => 6 
     [1] => A 
     [2] => B 
     [3] => C 
     [4] => D 
     [5] => E 
     [6] => G 
     [7] => 10.00 
     [8] => 20.12 
     [9] => 100 
     [10] => G 
     [11] => H 
     [12] => I 
     [13] => 98 
     [14] => 99 
     [15] => 989 
     [16] => 989 
     [17] => s 
     [18] => d 
     [19] => 0 
     [20] => 0 
     [21] => 
     [22] => 
     [23] => 0 
     [24] => 0 
     [25] => 0 
     [26] => 0 
    ) 

) 

这是真实的数组,但我怎样才能改变这样的指标:

Array 
(
[0] => Array 
    (
     [ID] => 4 
     [PIBAJU] => A 
     [JIKA] => B 
     [SAJA] => C 
     [BISA] => D 
     [DATA] => E 
     [LIMA] => F` 
     [DELAPAN] => 10.00 
     [SEMBILAN] => 20.12 
     [SEPULU] => 100 
     [SEBELAS] => G 
     [DUA BELAS] => H 
     [TIGABELAS] => I 
     [DUNIA] => 98 
     [KISAH] => 99 
     [CINTA] => 989 

    ) 

[1] => Array 
    (
     so on, so on 
    ) 

+0

你只需要插入一个标题行或预先定义的列名。如果您不确定如何操作,请更新您的问题,以表明这是您的问题。 – Julie

回答

2

通常情况下,使用CSV解析引擎,第一组数据的保留为你的域表格标题。这意味着这里的第一行是作为您的关联数组中的混合键,将值分配给它们。我假设如果你有第三行的值,它将有与数组中的第一项相同的混合键。

但我会说,如果您只是试图从CSV中获取一组值,您不需要引入依赖项,因为PHP内置了CSV解析引擎。以下是使用fopen()的示例以及fgetcsv()将吐出只是值(与数字键即)数组:

/* USE DOWNLOADED LIBRARY */  

// $this->load->library('csvimport'); 
// $tryOne = $this->csvimport->get_array(); 


$csv = $upload_data['full_path']; 
$tryOne = array(); 

if(file_exists($csv)){ 
    $file = fopen($csv , 'r'); // r flag is for readonly mode 

    while(($line = fgetcsv($file)) !== false) { // if line exists 

     $tryOne[] = $line; // add to array 

    } 

    fclose($file); 
} 

echo "<pre>"; 
print_r($tryOne);