php指定文件内容转换

时间:2015-03-09 12:30:10

标签: php arrays file

是否可以将特定文本文件内容转换为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 :(得分: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));

?>

答案 1 :(得分: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