使用php将.txt文件扩展为多维数组,并插入到不同的Tables mysql中


Explode a .txt file into multidimensional array with php and insert into different Tables mysql

目前我有一个看起来像这样的文件:

----------- cat1 -------------
Nom_cat=cat1
desc_cat=test description cat
----------- detail_cat ---------------
det_nom=test nom
det_desc=schema precis
det_titre=le schema de l'appli
------------- sous_cat_prd -------------
prd_nom=testprd,prd_descr=descrprd,prd_type=typeprd
prd_nom=ordi,prd_descr=perform,prd_type=ibm
prd_nom=apareil,prd_descr=description de l'apareil,prd_type=photo
-------------- sous_cat_schema -------------
scs_nom=schemaprd:scs_descr=descr schem:scs_adr=77 rue
scs_nom=schema2:scs_descr=description du schema2:scs_adr=40 bldv
----------- cat2 -------------
Nom_cat=cat2
desc_cat=test2 description cat
----------- detail_cat ---------------
det_nom=testnom2
det_desc=schema precis test2
det_titre=le schema de l'appli2
------------- sous_cat_prd -------------
prd_nom=testprd2,prd_descr=descr prd,prd_type=type produit
prd_nom=machine,prd_descr=performant,prd_type=nespress

我要做的是用PHP把它转换成一个多维数组所以它看起来像这样:

array(Nom_cat=>cat1, desc_cat=>test description cat, array(det_nom=>test nom, det_desc=>schema precis,det_titre=>le schema de l'appli),
    array(array(prd_nom=>testprd,prd_descr=>descrprd,prd_type=>typeprd)
    , array(prd_nom=>ordi,prd_descr=>perform,prd_type=>ibm)
    , array(prd_nom=>apareil,prd_descr=>description de l'apareil,prd_type=>photo))
)
array(Nom_cat=>cat2, desc_cat=>test2 description cat, array(det_nom=>testnom2,    det_desc=>schema precis test2, det_titre=>le schema de l'appli2),
            array(array(prd_nom=>testprd2,prd_descr=>descr prd,prd_type=>type produit)
         , array(prd_nom=>machine,prd_descr=>performant,prd_type=>nespress))
)

   it shows me this result:
     Array ( [0] => Array ( [Nom_cat] => cat1 )
           [1] => Array ( [desc_cat] => test description cat ) 
           [2] => Array ( [det_nom] => test nom )
           [3] => Array ( [det_desc] => schema precis )
           [4] => Array ( [det_titre] => le schema de l'appli ) 
           [5] => Array ( [prd_nom] => testprd,prd_descr ) 
           [6] => Array ( [prd_nom] => ordi,prd_descr ) 
           [7] => Array ( [prd_nom] => apareil,prd_descr )
           [8] => Array ( [scs_nom] => schemaprd:scs_descr ) 
           [9] => Array ( [scs_nom] => schema2:scs_descr ) 
           [10] => Array ( [Nom_cat] => cat2 ) 
           [11] => Array ( [desc_cat] => test2 description cat )
           [12] => Array ( [det_nom] => testnom2 ) 
           [13] => Array ( [det_desc] => schema precis test2 ) 
           [14] => Array ( [det_titre] => le schema de l'appli2 )
           [15] => Array ( [prd_nom] => testprd2,prd_descr )
           [16] => Array ( [prd_nom] => machine,prd_descr ) 
           [17] => Array ( [scs_nom] => scc:scs_descr )
           [18] => Array ( [scs_nom] => vers:scs_descr ) 
       )

我想要的是这样的结果:

   array (
      [0] => array (
                 [Nom_cat] => 'cat1'
                 [desc_cat]     => 'test description cat'
             [0] => array (
                            [det_nom]=> 'test nom'
                                [det_desc]=> 'schema precis'
                                [det_titre]=> 'le schema de l appli'
                              )
             [0] => array (
                                [prd_nom] => 'testprd'
                                [prd_descr] => 'descrprd'
                                [prd_type] => 'typeprd'
                              )
                 [1] => array (
                                [prd_nom] => 'ordi'
                                [prd_descr] => 'perform'
                                [prd_type] => 'ibm'
                               )
                 [2] => array (
                                 [prd_nom] => 'apareil'
                                 [prd_descr] => 'description de l apareil'
                                 [prd_type] => 'photo'
                               )
                   ..................
                   )
      [1] => array (
                 [Nom_cat] => 'cat2'
                 [desc_cat]     => 'test description cat'
                 ..............

   )

最简单的做法是忽略所有以破折号开头的行,并读取数组中所有其他行。

这是一种可以实现的方法:

$categories = array();
$fh = fopen("file.txt", "r");
while (($buffer = fgets($fh)) !== false) {
  if (substr($buffer, 0, 1) == "-")  // ignore lines starting with "-"
    continue;
  $lineData = explode("=", $buffer);
  $categories[$lineData[0]] = $lineData[1];
}
fclose($fh);