2017-05-07 35 views
0

我想弄清楚我在做什么,给了我错误的结果。PHP解析文件到数组

我有这样组成的文件:

2017/05/02 BA 86 23 39 89 5 
2017/05/02 CA 23 4 14 86 5 
2017/05/02 FI 71 26 19 15 6 
2017/05/02 GE 69 5 16 58 83 
2017/05/02 MI 19 45 4 16 68 
2017/05/02 NA 6 16 75 78 89 
2017/05/02 PA 67 83 21 5 1 
2017/05/02 RM 51 79 12 47 19 
2017/05/02 RN 27 83 41 37 23 
2017/05/02 TO 44 17 60 31 53 
2017/05/02 VE 89 32 48 71 57 
2017/05/04 BA 61 70 47 71 75 
2017/05/04 CA 26 44 16 77 55 
2017/05/04 FI 3 11 37 38 18 
2017/05/04 GE 70 14 75 86 55 
2017/05/04 MI 71 53 39 6 30 
2017/05/04 NA 73 20 12 13 54 
2017/05/04 PA 37 49 33 80 61 
2017/05/04 RM 39 60 75 32 2 
2017/05/04 RN 40 78 43 75 55 
2017/05/04 TO 24 87 52 90 16 
2017/05/04 VE 14 54 25 61 63 
2017/05/06 BA 15 31 20 78 66 
2017/05/06 CA 84 33 47 9 45 
2017/05/06 FI 17 48 33 49 20 
2017/05/06 GE 16 51 62 21 72 
2017/05/06 MI 12 83 64 62 2 
2017/05/06 NA 15 80 52 5 89 
2017/05/06 PA 2 33 65 72 61 
2017/05/06 RM 29 49 13 70 83 
2017/05/06 RN 30 81 55 37 41 

正如你可以看到这是格式化这样:

DATE(标签)LETTERS(标签)N1(标签)N2(标签)N3 (标签)N4(标签)N5(标签)

第二行有相同的日期,并且更改了LETTERSN_

我需要这个文件插入到数据库中,但是这必须有一个线每一个日期,就像这样:

Date  |BA1|BA2|BA3|BA4|BA5|CA1|CA2|CA3|CA4|CA5|FI1|FI2|FI3|FI4|FI5| 
----------------------------------------------------------------- 
2017/05/02| 86 | 23| 39| 89|5 |23 | 4 | 14|86 |5..... 
----------------------------------------------------------------- 
2017/05/04|61 |70 |47 |71 |75 |26 |44 |16 |77 |55... 

为什么我的代码不工作?

public function caricaStorico(){ 
     $this->load->helper('file'); 

     $storico = read_file(base_url("storico.txt")); 

     $splitter = explode("\n", $storico); 
     $data_estr = "-"; 
     $insert = []; 
     $arr_key = 0; 

     echo "<pre>"; 

     foreach ($splitter as $key => $value) { 
      $dati = explode("\t", $value); 

      if(count($dati)>1) { 

       $data_estr = $dati[0]; 

       $ruota = $dati[1]; 
       $n1 = $dati[2]; 
       $n2 = $dati[3]; 
       $n3 = $dati[4]; 
       $n4 = $dati[5]; 
       $n5 = $dati[6]; 

       switch ($ruota) { 
        case 'BA': 
         array_push($insert, ["data_estrazione" => $data_estr, "BA1" => $n1, 'BA2' => $n2, "BA3" => $n3, "BA4" => $n4, "BA5" => $n5]); 
         break; 

        case 'FI': 
         $insert[$arr_key] += ["FI1" => $n1, 'FI2' => $n2, "FI3" => $n3, "FI4" => $n4, "FI5" => $n5]; 
         break; 

        case 'MI': 
         $insert[$arr_key] += ["MI1" => $n1, 'MI2' => $n2, "MI3" => $n3, "MI4" => $n4, "MI5" => $n5]; 
         break; 

        case 'NA': 
         $insert[$arr_key] += ["NA1" => $n1, 'NA2' => $n2, "NA3" => $n3, "NA4" => $n4, "NA5" => $n5]; 
         break; 

        case 'PA': 
         $insert[$arr_key] += ["PA1" => $n1, 'PA2' => $n2, "PA3" => $n3, "PA4" => $n4, "PA5" => $n5]; 
         break; 

        case 'RM': 
         $insert[$arr_key] += ["RM1" => $n1, 'RM2' => $n2, "RM3" => $n3, "RM4" => $n4, "RM5" => $n5]; 
         break; 

        case 'TO': 
         $insert[$arr_key] += ["TO1" => $n1, 'TO2' => $n2, "TO3" => $n3, "TO4" => $n4, "TO5" => $n5]; 
         break; 

        case 'VE': 
         $insert[$arr_key] += ["VE1" => $n1, 'VE2' => $n2, "VE3" => $n3, "VE4" => $n4, "VE5" => $n5]; 
         break; 

        case 'RN': 
         $insert[$arr_key] += ["NZ1" => $n1, 'NZ2' => $n2, "NZ3" => $n3, "NZ4" => $n4, "NZ5" => $n5]; 
         break; 
       } 
      } 
      $arr_key = $arr_key+1; 
     } 

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

    } 

如果我删除$input[$arr_key]和我做$input[0]我得到正确的结果只有第一个阵列上,而其他的则只能包含BA号码,你可以看到:

Array 
(
    [0] => Array 
     (
      [data_estrazione] => 1939/01/07 
      [BA1] => 58 
      [BA2] => 22 
      [BA3] => 47 
      [BA4] => 49 
      [BA5] => 69 
      [FI1] => 27 
      [FI2] => 57 
      [FI3] => 81 
      [FI4] => 43 
      [FI5] => 61 
      [MI1] => 40 
      [MI2] => 38 
      [MI3] => 57 
      [MI4] => 67 
      [MI5] => 7 
      [NA1] => 85 
      [NA2] => 44 
      [NA3] => 48 
      [NA4] => 88 
      [NA5] => 55 
      [PA1] => 73 
      [PA2] => 80 
      [PA3] => 39 
      [PA4] => 38 
      [PA5] => 57 
      [RM1] => 73 
      [RM2] => 24 
      [RM3] => 4 
      [RM4] => 39 
      [RM5] => 22 
      [TO1] => 19 
      [TO2] => 43 
      [TO3] => 10 
      [TO4] => 31 
      [TO5] => 27 
      [VE1] => 9 
      [VE2] => 43 
      [VE3] => 61 
      [VE4] => 14 
      [VE5] => 75 
      [NZ1] => 72 
      [NZ2] => 12 
      [NZ3] => 42 
      [NZ4] => 57 
      [NZ5] => 31 
     ) 

    [1] => Array 
     (
      [data_estrazione] => 1939/01/14 
      [BA1] => 18 
      [BA2] => 77 
      [BA3] => 33 
      [BA4] => 62 
      [BA5] => 19 
     ) 

    [2] => Array 
     (
      [data_estrazione] => 1939/01/21 
      [BA1] => 68 
      [BA2] => 65 
      [BA3] => 41 
      [BA4] => 28 
      [BA5] => 67 
     ) 

    [3] => Array 
     (
      [data_estrazione] => 1939/01/28 
      [BA1] => 76 
      [BA2] => 55 
      [BA3] => 48 
      [BA4] => 85 
      [BA5] => 71 
     ) 

    [4] => Array 
     (
      [data_estrazione] => 1939/02/04 
      [BA1] => 70 
      [BA2] => 2 
      [BA3] => 20 
      [BA4] => 85 
      [BA5] => 75 
     ) 

    [5] => Array 
     (
      [data_estrazione] => 1939/02/11 
      [BA1] => 82 
      [BA2] => 81 
      [BA3] => 16 
      [BA4] => 52 
      [BA5] => 77 
     ) 

回答

1

你可以通过使用日期作为数组的关键字来检查这一点: 我用字符串变量来演示你的情况,所以你可以根据需要更改storico变量。

<?php 
function caricaStorico(){ 
     $storico = '2017/05/02 BA 86 23 39 89 5, 2017/05/02 CA 23 4 14 86 5, 2017/05/03 BA 86 23 39 89 5, 2017/05/03 CA 23 4 14 86 5'; 
     $splitter = explode(",", $storico); 
     $data_estr = "-"; 
     $insert = []; 

     echo "<pre>"; 
     foreach ($splitter as $key => $value) { 
      $dati = explode(" ", $value); 

      if(count($dati)>1) { 

       $data_estr = trim($dati[0]); 

       $ruota = $dati[1]; 
       $n1 = $dati[2]; 
       $n2 = $dati[3]; 
       $n3 = $dati[4]; 
       $n4 = $dati[5]; 
       $n5 = $dati[6]; 

       if(isset($insert[$data_estr]) && is_array($insert[$data_estr])) 
        $insert[$data_estr] += [ "data_estrazione" => $data_estr, $ruota."1" => $n1, $ruota."2" => $n2, $ruota."3" => $n3, $ruota."4" => $n4, $ruota."5" => $n5 ]; 
       else 
        $insert[$data_estr] = array("data_estrazione" => $data_estr, $ruota."1" => $n1, $ruota."2" => $n2, $ruota."3" => $n3, $ruota."4" => $n4, $ruota."5" => $n5); 
      } 
     } 

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

    } 

    caricaStorico(); 
?> 

输出到这个代码:

Array 
(
    [2017/05/02] => Array 
     (
      [data_estrazione] => 2017/05/02 
      [BA1] => 86 
      [BA2] => 23 
      [BA3] => 39 
      [BA4] => 89 
      [BA5] => 5 
      [CA1] => 23 
      [CA2] => 4 
      [CA3] => 14 
      [CA4] => 86 
      [CA5] => 5 
     ) 

    [2017/05/03] => Array 
     (
      [data_estrazione] => 2017/05/03 
      [BA1] => 86 
      [BA2] => 23 
      [BA3] => 39 
      [BA4] => 89 
      [BA5] => 5 
      [CA1] => 23 
      [CA2] => 4 
      [CA3] => 14 
      [CA4] => 86 
      [CA5] => 5 
     ) 

) 
+0

这就是它! :) Tks –