создать дерево категорий с помощью файла CSV - PullRequest
1 голос
/ 21 сентября 2011

Мне нужна помощь для создания дерева категорий из файла CSV.

Я пробовал много вещей, но теряюсь ...

У меня есть файл с 800 строками, который выглядитнапример:

"LOADERS", "S130", "Above & 524611001, 524711001 & Above", "MAINTENANCE ITEMS", "SCHEDULED MAINTENANCE ITEMS (500 HOUR)"
"LOADERS", "S130", "Above & 524611001, 524711001 & Above", "MAINTENANCE ITEMS", "SCHEDULED MAINTENANCE ITEMS (1000 HOUR)"
"LOADERS", "S130", "Above & 524611001, 524711001 & Above", "MAIN FRAME", "OPERATOR CAB"

В этих строках столбец 1 представляет родительский класс. Столбец 2 является дочерним элементом столбца 1. Столбец 3 является дочерним элементом столбца 2. Столбец 3 является родительским элементом столбца 4 (но этоexplode (',', Column 3)) Explode в столбце 4 - матери 5

Я хотел бы создать массив этого типа (и создал идентификатор, начинающийся с 50), потому что цель состоит в том, чтобы преобразоватьэтот файл в mysql DB: s

Мне бы удалось получить что-то вроде этого

LOADERS (id = 50)
|___S130 (id = 51)
|----|____Above & 524611001 (id = 52)
|-----------|____ MAINTENANCE ITEMS (id = 53)
|------------------|____SCHEDULED MAINTENANCE ITEMS (500 HOUR) (id = 54)
|------------------|____SCHEDULED MAINTENANCE ITEMS (1000 HOUR) (id = 55)
|-----------|____ MAIN FRAME (id = 56)
|------------------|____OPERATOR CAB (id = 57)
|----|____Above & 524711001 (id = 58)
|-----------|____ MAINTENANCE ITEMS (id = 59)
|------------------|____SCHEDULED MAINTENANCE ITEMS (500 HOUR) (id = 60)
|------------------|____SCHEDULED MAINTENANCE ITEMS (1000 HOUR) (id = 61)
|-----------|____ MAIN FRAME (id = 62)
|------------------|____OPERATOR CAB (id = 63)

Я попробовал несколько методов, и я начинаю отчаиваться.Все, чего я даже не достиг желаемого результата: s Я потею на нем с понедельника и хочу повеситься.

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Попробуйте что-то вроде этого:

<code><?php
// generate categories tree with csv file
// /8291800/sozdat-derevo-kategorii-s-pomoschy-faila-csv

$big_array  = array();
$temp_array = array();

$csv = <<< CSV
"LOADERS", "S130", "Above & 524611001, 524711001 & Above", "MAINTENANCE ITEMS", "SCHEDULED MAINTENANCE ITEMS (500 HOUR)"
"LOADERS", "S130", "Above & 524611001, 524711001 & Above", "MAINTENANCE ITEMS", "SCHEDULED MAINTENANCE ITEMS (1000 HOUR)"
"LOADERS", "S130", "Above & 524611001, 524711001 & Above", "MAIN FRAME", "OPERATOR CAB"
CSV;

foreach(preg_split("/(\r?\n)/", $csv) as $line) {

    list($column1, $column2, $column3, $column4) = explode('", "', $line);

    $column1 = preg_replace('/^"/', '', $column1);
    $column4  = preg_replace('/\"(?<!\\")/', '', $column4);

    foreach(explode(', ', $column3) as $column3_part) {
        $temp_array[$column3_part][] = $column4;
    }


    $big_array[$column1][$column2] = $temp_array;
}

echo '<pre>' . print_r($big_array, 1) . '
<час /> '; $ counter = 50; foreach ($ big_array как $ key1 => $ level1) { foreach ($ level1 as $ key2 => $ level2) { foreach ($ level2 как $ key3 => $ level4) { foreach ($ level4 как $ level5) { echo '
' . print_r('INSERT INTO DATABASE: ' . $counter . ', ' . $key1 . ', ' . $key2 . ', ' . $key3 . ', ' . $level5, 1) . '
'; $ Счетчика ++; } } } } ?>
0 голосов
/ 22 сентября 2011

Большое спасибо, Айман.Вот мой код, который содержит трек, который вы мне дали.

$big_array  = array();
$temp_array = array();

if (($handle = fopen("arbocsv.csv", "r")) !== FALSE) 
{
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {

        $serials = preg_replace('/ /','',$data[2]);
    $serials = preg_replace('/&/',' & ',$serials);
    $serials = explode(',',$serials);

    foreach($serials as $serial)
    {
        $temp_array[trim($serial)][trim($data[3])][] = trim($data[4]); 
    }

    $big_array[trim($data[0])][trim($data[1])] = $temp_array;


}
}
...