CSV парсер

```
todo: разделить на более мелкие функции, чтобы наследоваться

```

todo: написать такую штуку:

- из любого места(20, 21 ) запрашиваем url - страницы (пока простой), он сохраняет его в базу парсера. (по улчанию кеш один день), и возвращает его контент

- посылаем в из любого места массив(json array) определенной структуры, имя бд, модель куда добавлять, и тд, и он добавляет tth

- посылаем в из любого места массив(json array) определенной структуры, имя бд, модель куда добавлять, и тд, и он добавляет complectation

- посылаем csv файл определенно структуры и базы добавляем tth

- посылаем csv файл определенно структуры и базы добавляем complectation

```
/*получаем такой массив

    Array

(

    [0] => Array

        (

            [0] =>

            [1] => ��омплектация жопа 1��я жопа 1�а 11

            [2] => ��омплектация жопа 1 Жопа2�опа 1 Жопа2��па2�2

            [3] => ��омплектация жопа 1 жопа3�опа 1 жопа3��па3�3

            [4] => ��омплектация жопа 1 жопа 64�па 1 жопа 64�а 644

            [5] =>

        )

    [1] => Array

        (

            [0] => ��атегория 1��ия 1 1

            [1] =>

            [2] =>

            [3] =>

            [4] =>

            [5] =>

        )

    [2] => Array

        (

            [0] => ��онари�ри��

            [1] => -

            [2] => -

            [3] => ��фигенные��ные�е�

            [4] => "+"

            [5] => ��фигенные��ные�е�

        )

    )

    )

     * */

    static public function csvFileToArray($table_file_name){

        $csv = array_map('str_getcsv', file($table_file_name));

        return $csv;

    }

    static public function startParsing($table_file_name, $code_complectation_model, $parent_complectation_name){

        $array_csv = self::csvFileToArray($table_file_name);

        $parent_model_id = $array_csv[0][0];

        $compctation_model_id = self::addComplectationModel($parent_model_id, $code_complectation_model, $parent_complectation_name);

        self::parsComplectationFromArray($array_csv, $compctation_model_id);

    }

    static public function parsComplectationFromArray($array_csv, $parent_model_id){

        $complectation_array = $array_csv[0]; // получаем список комплектаций

        unset($complectation_array[0]);

        $price_array = $array_csv[1]; // список цен

        unset($price_array[0]);

        unset($array_csv[0]); // удаляем строку с названиями комплектаций

        unset($array_csv[1]);//удаляем строку с ценами

        $complectetion_num = 1;

        foreach ($complectation_array as $complectation_name){

            echo $complectation_name."\n";

            $model_id = simpleModels::addModel(array(

                "name"    =>     $complectation_name,

                "code"    =>     ParserExt::toCode($complectation_name),

                "parent_id"    => $parent_model_id,

            ));

            simpleModels::setModelInfo([

                "model_id" => $model_id,

                "price"     =>  $price_array[$complectetion_num]

                ]

            );

            $group_option_name = "нет названия группы";

            $option_name = "нет названия опции";

            $id_group = '';

            foreach ($array_csv as $row_table){

                if ($row_table[1] == ''){

                    $group_option_name = $row_table[0];

                    $id_group = simpleModels::addEquipmentGroup(

                        [

                            "name"  => $group_option_name

                        ]);

                    echo $group_option_name."Группа!!!\n ";

                    echo "id: ".$id_group."\n";

                }else{

                    if (empty($id_group)){

                        echo "net gruppi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";

                        die();

                    }

                    $option_name = $row_table[0];

                    $option_value = trim($row_table[$complectetion_num]);

                    if ($option_value == '0'){

                        $option_name = $option_name.' (платное оборудование)';

                    }

                    $option_id = simpleModels::addEquipment(

                        [

                            "name" => $option_name,

                            "group_id" => $id_group,

                        ]

                    );

                    if ($option_value == '0' or $option_value == '*'){

                        simpleModels::addEquipmentValue(

                            [

                                "model_id" => $model_id,

                                "equipment_id" => $option_id,

                                "description" => $option_value,

                                "included" => 1

                            ]

                        );

                    }

                    echo "---".$option_name."Опция  ".$option_value." значение\n";

                }

            }

            $complectetion_num = $complectetion_num + 1;

        };

    }

    static public function addComplectationModel($parent_id, $code, $name){

        $model_id = simpleModels::addModel(array(

            "name"    =>     $name,

            "code"    =>     $code,

            "parent_id"    => $parent_id,

        ));

        return $model_id;

    }

}

singleModelParser::startParsing("c5.csv", 'price', 'Цены');

```

парсер TTH:

```
class SkodaTthParserNew
{
    public static function initDb()
    {

    }

    static public function csvFileToArray($table_file_name){

        $csv = array_map('str_getcsv', file($table_file_name));
        return $csv;

    }

    static public function startParsing($table_file_name){

        $array_csv = self::csvFileToArray($table_file_name);
        $parent_model_id = $array_csv[0][0];
        self::parsTTXFromArray($array_csv, $parent_model_id);

    }

    static public function parsTTXFromArray($array_csv, $parent_model_id){
        $complectation_array = $array_csv[0]; // получаем список комплектаций
        unset($complectation_array[0]);
        unset($array_csv[0]); // удаляем строку с названиями комплектаций
        SimpleModels::clearChildModelsWithTTh($parent_model_id);
        $complectetion_num = 1;
        echo  $parent_model_id;
        foreach ($complectation_array as $complectation_name){
            echo $complectation_name."\n";
          $model_id = SimpleModels::addModel(array(
                 "name"    =>     $complectation_name,
                 "code"    =>     ParserExt::toCode($complectation_name),
                 "parent_id"    => $parent_model_id,
             ));
            $group_option_name = "нет названия группы";
            $option_name = "нет названия опции";
            $id_group = '';
            $group_sort = 10;
            foreach ($array_csv as $row_table){
                if ($row_table[1] == ''){
                    $group_option_name = $row_table[0];
                    $id_group = simpleModels::addNewTthData($group_option_name, $group_sort);
                    echo $group_option_name."Группа!!!\n ";
                    echo "id: ".$id_group."\n";
                    $group_sort = $group_sort + 10;
                }else{
                    if (empty($id_group)){
                        echo "net gruppi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
                        die();
                    }
                    $option_name = $row_table[0];
                    $option_value = trim($row_table[$complectetion_num]);

                    $option_id = simpleModels::addNewTthData($option_name, 0, $id_group);

                    simpleModels::addNewTThValue($option_id, $option_value, $model_id);
                    echo "---".$option_name."Опция  ".$option_value." значение\n";

                }
            }
            $complectetion_num = $complectetion_num + 1;
        };
    }

}

SkodaTthParserNew::initDb();
SkodaTthParserNew::startParsing('rapid_2020.csv');

```