php указать конвертировать содержимое файла

0

Возможно ли преобразовать содержимое конкретного текстового файла в массив php?

Например:

Текстовый файл

//group
1
// first id other values
1 5 7 3 83 83 83 1
2 6 7 3 86 83 83 4
3 3 7 3 63 83 83 7
4 3 7 3 84 83 86 1
end
//group
2
// first id other values
1 3 7 3 83 83 83 1
2 6 7 3 86 83 83 4
3 3 7 3 63 83 83 7
4 3 7 3 84 83 86 1
end

Возвращаемый php-массив

1 => array(
  1 => array(5, 7, 3, 83, 83, 83, 1),
  2 => array...
),
2 => array(
  1 => array(3, ...),
  ....

и т.д., до конца, затем следующую группу чисел, а также игнорировать строки комментариев // или #

  • 2
    Да, это возможно. Можете ли вы поделиться тем, что вы пробовали, и с какими проблемами вы столкнулись?
  • 0
    я думаю, что вы можете использовать file_get_contents чтобы получить данные из файла .. explode его, используя \n а затем поместить каждую строку в массив ... и о // и # , вы можете использовать preg_replace чтобы заменить их ..
Теги:
arrays
file

2 ответа

0
Лучший ответ

Решено...

Текстовый файл

// group 1
1
1 4 3 "ssssssss"
end

// group 2
2
1 5 4 "ssssssss s"
end

// group 3
3
1 6 5 "ssssssss ss"
end

Преобразование кода php

$list = array();
$handle = fopen('Item.txt', 'r');

while(($line = fgets($handle)) !== false)
{

    // skip comments
    if(preg_match('!^//!', $line) || preg_match('/#/', $line))
    {

        continue;

    }

    // replace all spaces
    $line = preg_replace('~"[^"]*"(*SKIP)(*F)|\s+~', ',', $line);

    // skip blanks
    if($line[0] == ',')
    {

        continue;

    }

    // define group
    if(substr_count($line, ',') == 1 || substr_count($line, 'end') == 1)
    {

        if(substr_count($line, 'end') == 0)
        {

            $key = str_replace(',', '', $line);

        }

        continue;

    }

    // remove last comma
    if(substr($line, -1) == ',')
    {

        $line = substr($line, 0, -1);

    }

    $arguments = explode(',', $line);

    $id = $arguments[0];

    unset($arguments[0]);

    $list[$key][$id] = $arguments;



}

fclose($handle);
print_r($list);

выход http://prntscr.com/6emxpq

1

У меня есть другое решение:

<?php

header('Content-type: text/plain');
$string = "//group
            1
            // first id other values
            1 5 7 3 83 83 83 1
            2 6 7 3 86 83 83 4
            3 3 7 3 63 83 83 7
            4 3 7 3 84 83 86 1
            end
            //group
            2
            // first id other values
            1 3 7 3 83 83 83 1
            2 6 7 3 86 83 83 4
            3 3 7 3 63 83 83 7
            4 3 7 3 84 83 86 2
            end";

$string = preg_replace('/[^0-9 \n]/','',$string);

$array = array_filter(explode("\n", $string));
$temp_array = array();
$new_array = array();
$index = -1;
foreach($array as $key => $arr){
    if(strlen(trim($arr)) == 1 && intval($arr) > 0){
        $index = intval($arr);
    }
    else if(strlen(trim($arr)) > 4){
        $temp_array = array_values(array_filter(explode(" ", $arr)));
        $temp_index = $temp_array[0];
        unset($temp_array[0]);
        $new_array[$index][$temp_index] = $temp_array;        
    }
}

print_r(array_filter($new_array));

?>
  • 0
    его может содержать строки, и разные размеры ..
  • 0
    ну, в следующий раз будьте более конкретны .. Я только что показал вам, что можно сделать парсинг с размещенным вами вкладом!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню