从文本文件填充的多维数组

时间:2014-03-04 06:49:07

标签: php arrays multidimensional-array

我想导入一个包含项目数据的txt文件。该文件有不同的部分。

$file = fopen( $filename, "r" );
    $object = array();

    while( !feof( $file ) )
    {
        $line = fgets($file);
        $items = explode( ";", $line );
        //Import the global values
        if( count($items) == 1 )
        {
            $arraySection = str_replace("#", "",trim($items[0]) );
        }

        else if ( count($items) == 3 )
        {
            $object[$arraySection][$items[0]] = $items[1];
        }
        else if ( count($items) == 4  )
        {
            //$object[$arraySection][] = array("gewerknummer" => $items[1], "gewerkbezeichnung" => $items[2]);
        }
        //Import the articel
        else if ( count($items) > 4 )
        {
            if( $items[0] == "Artikel-Nr" )
            {
                $articelrow = $items;
            }
            else
            {
                $articeldetails = array();
                for($i = 0; $i < count($items)-1; $i++)
                {
                    $articeldetails[] = array($articelrow[$i]=>$items[$i]);
                }
                $object["artikel"] = array(
                    $articeldetails
                );
            }
        }
    }
    //Start of import the array to the database
    $arrValue = array();

    for($i = 0; $i < count($object['artikel']); $i++)
    {
        $tArray = array();

        $tArray[] = $object['Objekt']['Objektnr'];
        $tArray[] = $object['SuAdresse']['SUNr'];
        $tArray[] = $object['artikel'][$i][0]['Artikel-Nr'];
        $tArray[] = "'" . $object['artikel'][$i][1]['Artikel']. "'";
        $tArray[] = "'" . $object['artikel'][$i][2]['Beschreibung'] . "'";
        $tArray[] = "'" . $object['artikel'][$i][3]['Einheit'] . "'";
        $tArray[] = "'" . str_replace(",", ".", $object['artikel'][$i][4]['Preis-Pro-Einheit']) . "'";
        $tArray[] = $object['artikel'][$i][5]['AnzahlParameter'];
        $tArray[] = "'" . $object['artikel'][$i][6]['P1_Einheit'] . "'";
        $tArray[] = "'" . $object['artikel'][$i][7]['P2_Einheit'] . "'";
        $tArray[] = "'" . $object['artikel'][$i][8]['P3_Einheit'] . "'";
        $tArray[] = "'" . $object['artikel'][$i][9]['MBS Artikel'] . "'";
        $tArray[] = $object['artikel'][$i][10]['Status'];
        $tArray[] = $object['artikel'][$i][11]['SuArtikel'];
        $tArray[] = $object['artikel'][$i][12]['SuGewerke'];
        $tArray[] = "'" . $object['artikel'][$i][13]['PreisStatus'] . "'";
        if ( empty( $object['artikel'][$i][14]['ZulageMindermengenArtikelNr'] ) )
            $tArray[] = 0;
        else
            $tArray[] = 0 . $object['artikel'][$i][14]['ZulageMindermengenArtikelNr'];

        $arrValue[] = "(" . implode(",", $tArray) . ")";

    }

    $query =    "INSERT INTO objekt_artikel
                    (
                        id_objekt,
                        id_subunternehmer,
                        artikelnummer,
                        artikel,
                        beschreibung,
                        einheit,
                        preis_pro_einheit,
                        anzahl_parameter,
                        p1_einheit,
                        p2_einheit,
                        p3_einheit,
                        mbs_artikel,
                        status,
                        su_artikel,
                        su_gewerk,
                        preis_status,
                        zulage_mindermengen_artikel_nummer
                    )
                VALUES " . implode(",", $arrValue);

但是关节点没有直接添加到多数组中,因为查询的循环只创建了一个插入,但是当我创建$ object的var_dump时,看起来所有值都插入到数组中

我认为填充数组并读出数据时出现逻辑错误。

echo count($object['artikel']) . "\n";die();

这给我的结果是,数组中只有一个元素,但正常情况下它必须超过800.

数组中的元素是Articel列表中的最后一个元素。

2 个答案:

答案 0 :(得分:1)

每次进入while循环时都要替换相同的变量...

$object['artikel'] = array($articeldetails);

通过这种做法,数组$ object每次都替换相同的单元格('artikel')...

答案 1 :(得分:1)

变化:

$object["artikel"] = array(
    $articeldetails
);

为:

$object["artikel"][] = $articeldetails;

您每次都不会添加$object['artikel'],而是覆盖它。