Чтение 2D Array из текстового файла, ПОМОГИТЕ! - PullRequest
1 голос
/ 25 мая 2011

ОБНОВЛЕНИЕ: Я понял, что проблема заключалась в том, что я использовал print вместо echo для печати данных, поэтому он отображал массив вместо данных внутри него. Спасибо огромное, ребята!

В настоящее время у меня есть текстовый файл, который выглядит следующим образом:

0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0

И я использую эту функцию:

function rFile($fileName){
$resultF = fopen($fileName, "r") or die("can't open file");
$array = array(); //Create the first dimension of a 2D array
$i=0;
while(!feof($resultF)){
  $line = fgets($resultF);
  $line = trim($line, "\n");
  $tokens = explode(",",$line);
  $array[$i]=array(); //Create the second dimension of the 2D array
  $tokenCount = sizeof($tokens);
  for($j=0; $j<$tokenCount; $j++){
    $array[$i][$j] = $tokens[$j];
  }
  $i++;
 }
return $array;
  }

По сути, он должен прочитать файл, разобрать каждый «0» и сохранить его в 2D-массиве $ array. По какой-то причине он возвращает это:

Array[0]
Array[1]
Array[2]
....etc etc

Кто-нибудь знает, что я сделал не так?

Ответы [ 5 ]

2 голосов
/ 25 мая 2011

PHP многомерные массивы - это просто массивы массивов.Там нет необходимости для внутреннего цикла.Вы можете просто сделать

while(...) {
   ... fgets stuff
   $array[$i] = explode(',', $line);
   $i++;
}

и получить тот же эффект.

1 голос
/ 25 мая 2011

Вы идете по этому сложному пути, используя для циклов и счетчиков. Используя синтаксис PHP * $array[] = $val, вы можете сэкономить много усилий здесь.

// all the file handling code...

while(!feof($resultF)){
  $line = fgets($resultF);
  $line = trim($line, "\n");
  $tokens = explode(",",$line);

  // Append the line array.
  $array[] = $tokens; //Create the second dimension of the 2D array
}

return $array;

Или чтобы быть еще более кратким:

$array[] = explode(",",$line);
0 голосов
/ 25 мая 2011
$f = file($fileName);

$results = array();

foreach ($f as $line) {
    $line = preg_replace("\n", "", $line);
    $results[] = explode(",", $line);
}
0 голосов
/ 25 мая 2011

Хмм, так как это разделено запятыми, мы можем использовать fgetcsv , чтобы сделать это коротким и простым:

$file = fopen('test.txt', 'r');

$matrix = array();
while($entries = fgetcsv($file)) {
  $matrix[] = $entries;
}

fclose($file);

Результирующий массив:

Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
        )

    [1] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
        )

    [2] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
        )

    [3] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
        )

    [4] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
        )

)
0 голосов
/ 25 мая 2011

попробуйте это:

function rFile($filename) {
    $lines = file($filename);

    if ($lines !== false) {
        foreach ($lines as & $line) {
            $line = explode(',', trim($line, '\n\r'));           
        }
    }

    return $lines;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...