使用php将.txt文件分解为多维数组并插入到不同的表mysql中

时间:2013-06-08 13:49:14

标签: php mysql file import

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

----------- 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'
                 ..............


   )

1 个答案:

答案 0 :(得分:1)

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

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

$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);