将文本文件的内容传输到2d数组

时间:2013-10-14 14:32:05

标签: php

所以我有一个这种格式的文本文件

2
3
1 0 0 0 0 0 6 0 7
0 8 0 7 0 1 0 4 0
0 3 2 4 0 0 0 1 0
0 0 0 0 0 9 1 0 0
3 1 0 0 4 0 0 2 9
0 0 4 8 0 0 0 0 0
0 2 0 0 0 3 5 6 0
0 9 0 2 0 4 0 3 0
8 0 3 0 0 0 0 0 2
2
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

编辑:

我必须将前两行2和3存储到两个单独的变量中。我需要将网格的其余部分转换为2d数组(无键)。我必须预期该程序可以处理多个网格(由第一行中的值表示)。我怎样才能做到这一点?我一直在寻找与合并具有键的2d数组有关的函数。

有没有比我这样做更好/更有效的方式?

<?php
    $lines = file("sudoku.in", FILE_IGNORE_NEW_LINES);

    $num_board = array_shift($lines);

    for ($k=0; $k<$num_board; $k++) {
        $size = array_shift($lines); //get size
        $size *= $size; //square size

        //get rid of whitespaces in grid
        for ($i=0; $i<$size; $i++) {
            $lines[$i] = explode(" ", $lines[$i]);
        }

        //transfer to 2d array "sudoku"
        for ($i=0; $i<$size; $i++) {
            for ($j=0; $j<$size; $j++) {
                $sudoku[$i][$j] = $lines[$i][$j];
            }
        }

        //print_grid
        for ($i=0; $i<$size; $i++) {
            for ($j=0; $j<$size; $j++) {
                echo $sudoku[$i][$j] . " ";
            }
            echo "<br>";
        }

        for ($i=$size; $i>0; $i--)
            array_shift($lines);

    }
?>

2 个答案:

答案 0 :(得分:0)

像这样的东西

<?php
$file_handle = fopen("Token.txt", "r");
$arr = array();
$vars = array();

while (!feof($file_handle)) {
$line_of_text = fgets($file_handle);
    if(strlen($line_of_text)==1)
    {
        $vars[]=$line_of_text;

    }
    else
    {
        $arr[][]=$line_of_text;
    }
}

print_r($vars); // you can access it as $vars[0], $vars[1]
print_r($arr); // This is the 2D array you wanted.
fclose($file_handle);

答案 1 :(得分:0)

“2d阵列”究竟是什么意思?当你在数组中存储没有键的行时,这将是一个1d数组,至少在我的理解中?

编辑 - 将所有单个数字提取到变量

$buffer = file_get_contents($fname);
$array = explode("\n", $buffer);

// walk the array and extract single digit entries
for ($i = 0, $limit = count($array), $varcount=1; $i < $limit; ++$i) {
    // this test could also be more specific, e.g. with preg_match
    if (strlen($array[$i]) == 1) {
        $var$varcount = array_slice($array, $i, 1);
        ++$varcount;
        --$limit;
        --$i;
    }
}

这将简单地从数组中提取单位数行,将它们放在变量$var1$var999中。问题是您没有任何关于创建这些$varX的信息的信息。