Создание массива чтения из разных файлов в PHP - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь сделать следующее:

У меня есть разные файлы (8 файлов), в которых хранятся такие значения:

1      2      3      4      5      6
7      8      9      10     11     12
....................

Я хочу прочитать 8 файлов одновременнои создайте массив, в котором будет храниться первое значение каждого файла, другой массив со вторым элементом и т. д.

Например, если первый элемент файла1 равен 1, в файле2 8,... в файле 8 23;результирующий массив в этой итерации будет выглядеть следующим образом:

first_array = [1, 8, ....., 23]

Я проводил несколько тестов для чтения файлов в PHP, например:

$myfile = fopen("textoPrueba.txt", "r", 
"/home/berni/Documentos/Vesta1");
// Output one character until end-of-file
while(!feof($myfile))
{
   echo fgetc($myfile);
}
fclose($myfile);

Этот код просто показывает мне элементы файла, но я хотел бы взять определенные элементы в итерации.

Кто-то может дать мне подсказку?Заранее спасибо

(ПРИМЕЧАНИЕ: файлы содержат более миллиона элементов)

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Другой вариант заключается в том, что после того, как мы file_get_content или прочитаем наши файлы, мы будем использовать простое выражение и собирать наши числа, используя preg_match_all:

$re = '/([0-9]+)/m';
$str = '1      2      3      4      5      6
7      8      9      10     11     12
1      2      3      4      5      6
1      2      3      4      5      6
';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

foreach ($matches as $key => $numbers) {
    foreach ($numbers as $key2 => $number) {
        echo $number . "\n";
    }
}

var_dump($matches);

array(24) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "1"
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "2"
  }
  [2]=>
  array(2) {
    [0]=>
    string(1) "3"
    [1]=>
    string(1) "3"
  }
  [3]=>
  array(2) {
    [0]=>
    string(1) "4"
    [1]=>
    string(1) "4"
  }
  [4]=>
  array(2) {
    [0]=>
    string(1) "5"
    [1]=>
    string(1) "5"
  }
  [5]=>
  array(2) {
    [0]=>
    string(1) "6"
    [1]=>
    string(1) "6"
  }
  [6]=>
  array(2) {
    [0]=>
    string(1) "7"
    [1]=>
    string(1) "7"
  }
  [7]=>
  array(2) {
    [0]=>
    string(1) "8"
    [1]=>
    string(1) "8"
  }
  [8]=>
  array(2) {
    [0]=>
    string(1) "9"
    [1]=>
    string(1) "9"
  }
  [9]=>
  array(2) {
    [0]=>
    string(2) "10"
    [1]=>
    string(2) "10"
  }
  [10]=>
  array(2) {
    [0]=>
    string(2) "11"
    [1]=>
    string(2) "11"
  }
  [11]=>
  array(2) {
    [0]=>
    string(2) "12"
    [1]=>
    string(2) "12"
  }
  [12]=>
  array(2) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "1"
  }
  [13]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "2"
  }
  [14]=>
  array(2) {
    [0]=>
    string(1) "3"
    [1]=>
    string(1) "3"
  }
  [15]=>
  array(2) {
    [0]=>
    string(1) "4"
    [1]=>
    string(1) "4"
  }
  [16]=>
  array(2) {
    [0]=>
    string(1) "5"
    [1]=>
    string(1) "5"
  }
  [17]=>
  array(2) {
    [0]=>
    string(1) "6"
    [1]=>
    string(1) "6"
  }
  [18]=>
  array(2) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "1"
  }
  [19]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "2"
  }
  [20]=>
  array(2) {
    [0]=>
    string(1) "3"
    [1]=>
    string(1) "3"
  }
  [21]=>
  array(2) {
    [0]=>
    string(1) "4"
    [1]=>
    string(1) "4"
  }
  [22]=>
  array(2) {
    [0]=>
    string(1) "5"
    [1]=>
    string(1) "5"
  }
  [23]=>
  array(2) {
    [0]=>
    string(1) "6"
    [1]=>
    string(1) "6"
  }
}

Демо

0 голосов
/ 10 июня 2019

С учетом следующих предположений:

  • каждый файл содержит строку чисел, разделенных пробелами
  • числа не превышают миллиардный

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

$myfile = fopen("textoPrueba.txt", "r", "/home/berni/Documentos/Vesta1");

// get the first 10 elements one at a time
$str = array();
for($i=0; $i<10; $i++) {
  // get the first 10 elements one at a time
  $str[] = fgetc($myfile);
}
fclose($myfile);

// squish them into a single string
$temp = join($str);

// explode it into an array separated by spaces
$split = explode(' ', $temp);

// get the first number
$first_element_of_file = $split[0];

В целях обучения это будет выполнено так, как вы просили.Я не утверждаю, что это лучший способ приблизиться к этому!

...