创建从PHP中的不同文件读取的数组

时间:2019-06-09 20:58:10

标签: php php-7

我正在尝试以下方法,

我有不同的文件(8个文件),存储的值如下:

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

我想同时读取8个文件,并创建一个数组,该数组将存储每个文件的第一个值,另一个数组将存储第二个元素,依此类推。

例如,如果file1的第一个元素是1,则在file2 8中,...在file8 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 个答案:

答案 0 :(得分:1)

另一种选择是,在我们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"
  }
}

Demo

答案 1 :(得分:0)

进行以下假设:

  • 每个文件都有一串用空格隔开的数字
  • 数量不超过十亿

从您提供的代码开始提取每个文件的第一个元素的代码:

$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];

出于学习目的,这将按照您的要求进行。我没有宣称这是实现它的最佳方法!