Ваш код будет выглядеть примерно так:
<code><?php
$handle = fopen("inputfile.txt", "r");
$lineVariables = [];
if ($handle) {
while (($line = fgets($handle)) !== false) {
$tmp = explode('=', $line);
$lineVariables[trim($tmp[0])][] = trim($tmp[1]);
}
fclose($handle);
$result = [];
foreach ($lineVariables as $key => $variable) {
$result[$key] = implode(', ', $variable);
}
echo '<pre>' . print_r($result, true) . '
'; } else {// ошибка при открытии файла. }
Вывод:
Array
(
[1] => 19-10-18 10:02:06, 19-10-18 10:03:06, 19-10-18 10:04:06
[2] => +1.313026E+00 l/s, +1.266786E+00 l/s, +1.597391E+00 l/s
[3] => +1.671796E-01m/s, +1.612923E-01m/s, +2.033861E-01m/s
[4] => +1.500691E+02m3, +1.501403E+02m3, +1.502291E+02m3
[5] => +1.501138E+02m3, +1.501850E+02m3, +1.502738E+02m3
[6] => +0.000000E+00m3, +0.000000E+00m3, +0.000000E+00m3
)
Объяснение
В цикле while вы читаете строки следующим образом:
$line = fgets($handle)
Затем вы нужно обработать эти строки. Поскольку индекс переменных - это первый символ, отделенный от строковых переменных, которые вы хотели бы добавить к строкам, вы можете использовать функцию explode , используя символ '=' в качестве разделителя.
Тогда в массиве $ tmp у вас будет 2 элемента: $tmp[0]
будет содержать индексы результата. И $tmp[1]
будет содержать оставшуюся часть строки.
Например, первая строка:
$tmp[0] // contains 1
$tmp[1] // contains 19-10-18 10:02:06
После цикла while наш $lineVariables
будет выглядеть так:
Array
(
[1] => Array
(
[0] => 19-10-18 10:02:06
[1] => 19-10-18 10:03:06
[2] => 19-10-18 10:04:06
)
[2] => Array
(
[0] => +1.313026E+00 l/s
[1] => +1.266786E+00 l/s
[2] => +1.597391E+00 l/s
)
[3] => Array
(
[0] => +1.671796E-01m/s
[1] => +1.612923E-01m/s
[2] => +2.033861E-01m/s
)
[4] => Array
(
[0] => +1.500691E+02m3
[1] => +1.501403E+02m3
[2] => +1.502291E+02m3
)
[5] => Array
(
[0] => +1.501138E+02m3
[1] => +1.501850E+02m3
[2] => +1.502738E+02m3
)
[6] => Array
(
[0] => +0.000000E+00m3
[1] => +0.000000E+00m3
[2] => +0.000000E+00m3
)
)
Теперь вы можете закрыть файл и сосредоточиться на преобразовании результата в желаемый вид. Мы собираемся сохранить результат в переменной $result
, которая является массивом, и один элемент массива будет представлять один желаемый результат, а индексы в массиве будут ссылкой на первый числовой символ в строках.
Чтобы добавить элементы $lineVariable
для каждой строки, мы можем использовать функцию implode , которая является своего рода противоположностью функции разнесения. Для одного сингла это преобразует это:
Array
(
[0] => 19-10-18 10:02:06
[1] => 19-10-18 10:03:06
[2] => 19-10-18 10:04:06
)
В эту единственную строку строки:
19-10-18 10:02:06, 19-10-18 10:03:06, 19-10-18 10:04:06
Итак, мы просто go прошли через подготовленный $lineVariables
и обработаем элементы в желаемый формат.
Вот и все.