如何使用PHP

时间:2015-07-23 08:47:36

标签: php parsing ini

我正在解析看起来像这样的.ini文件(结构只是更长)

一辆车总是3行。每条线都有左侧站点和右侧站点。虽然左侧站点始终相同,但正确的站点正在发生变化。

00code42=52
00name42=Q7 03/06-05/12 (4L) [V] [S] [3D] [IRE] [52]
00type42=Car
00code43=5F
00name43=Q7 od 06/12 (4L) [V] [S] [3D] [5F]
00type43=Car

我正在做的是:

$ini = parse_ini_file('files/models.ini', false, INI_SCANNER_RAW);
foreach($ini as $code => $name)
{
   //some code here
}   

每辆车的每个值对我来说都是重要的,我可以得到每一个但是非常特别,我需要你的帮助才能找到正确的逻辑。

我需要得到的东西:

  
      
  • mCode(从第一辆车开到00)
  •   
  • 代码(从第一辆车开始是52)
  •   
  • 车辆(从第一辆车开始是Q7 03 / 06-05 / 12(4L))
  •   来自[]的
  • 值(对于第一辆车,它是V,S,3D,IRE,52
  •   
  • 车型(第一辆车是“汽车”)
  •   

我如何从正确的网站获取代码:

$mcode = substr($code, 0, 2);  //$code comes from foreach
echo "MCode:".$mcode;   

我如何获得车型:

echo $name; // $name from foreach

我如何从括号中解析车辆和值等值:

    $arr = preg_split('/\h*[][]/', $name, -1, PREG_SPLIT_NO_EMPTY); // $name comes from foreach
array(6) { [0]=> string(19) "Q7 03/06-05/12 (4L)" [1]=> string(1) "V" [2]=> string(1) "S" [3]=> string(2) "3D" [4]=> string(3) "IRE" [5]=> string(2) "52" } 

所以基本上我可以得到我需要的每个值,只是不知道如何编写逻辑来使用它。

  • 一般情况下,我可以跳过每辆车的第一行,因为那里的所有值都在另一行中
  • 我只需要第2行和第3行但是如何跳过这样的行? (当时想做点什么:

    if($ number%3 == 0)但我不知道行数。

  • 获取所有数据后,我无法在某处回复它,但我还需要将其存储在数据库中,如果

  • 我该怎么办?

我真的会帮助你找到正确的方法来找到我如何在正确的周期中获取这些数据,然后调用函数将它们全部插入数据库。

编辑: 我在考虑这样的事情: http://pastebin.com/C97cx6s0 但这只是不起作用的结构

1 个答案:

答案 0 :(得分:0)

如果您的数据一致,请使用array_chunkarray_keysarray_values

foreach(array_chunk($ini, 3, true) as $data) 
{
    // $data is an array of just the 3 that are related
    $mcode = substr(array_keys($data)[0], 0, 2);
    $nameLine = array_values($data)[1];
    $typeLine = array_values($data)[2];

    //.. parse the name and type lines here.

    //.. add to DB
}