Мне нужна помощь / опыт php, чтобы настроить / изменить эту функцию preg_match_all. Что я хочу сделать, это создать значения по умолчанию для пропущенных упорядоченных пар. Это соответствует данным правильно, но мне нужно немного логики, чтобы добавить некоторые значения по умолчанию. (см. ОЖИДАЕМЫЙ вывод данных ниже). Может ли это быть обработано в этой же функции? Спасибо!
фрагмент preg_match_all:
foreach ($InputFile as $line){
preg_match_all("/([0-9])-([^=]+)=([^;]+);/", $line, $matches, PREG_SET_ORDER);
$LineData = array();
foreach ($matches as $information)
$LineData[$information[2]] = $information[3];
$data[] = $LineData;
print_r($LineData);
}
Файл данных имеет максимум (8) атрибутов в следующем порядке:
1-Server
2-Logdate
3-BackupSet
4-StartTime
5-Duration
6-DBServer
7-Size
8-Status
Но в файле есть экземпляры, где есть строки, которые НЕ имеют всех атрибутов, таких как 5-Duration, 7-Size, 8-Status. Я хочу разместить значение по умолчанию для этих атрибутов что-то вроде:
5-Duration => 0
7-Size => 0
8-Status => incomplete
Выход массива: (текущий)
Array ( [Server] => hostname3.prop.abc
[Logdate] => Wed Jan 05 2011
[BackupSet] => rfoo101.az1
[StartTime] => 20110105000004
[Duration] => 00:56:47
[DBServer] => rfoo101.prop.az1.kaz.com
[Size] => 56.51
[Status] => Backup succeeded )
Array ( [Server] => hostname3.prop.abc
[Logdate] => Wed Jan 05 2011
[BackupSet] => bar202.az4_lvm
[StartTime] => 20110105040003
[DBServer] => bar202.prop.az4.kaz.com)
Array ( [Server] => hostname10.prop.az2
[Logdate] => Thu Jan 06 2011
[BackupSet] => bar201_az2_lvm
[StartTime] => 20110106151622
[DBServer] => bar201.prop.az2.kaz.com
[Status] => Backup failed )
Ожидается вывод данных: (С ЗНАЧЕНИЯМИ ПО УМОЛЧАНИЮ)
Array ( [Server] => hostname3.prop.abc
[Logdate] => Wed Jan 05 2011
[BackupSet] => rfoo101.az1
[StartTime] => 20110105000004
[Duration] => 00:56:47
[DBServer] => rfoo101.prop.az1.kaz.com
[Size] => 56.51
[Status] => Backup succeeded )
Array ( [Server] => hostname3.prop.abc
[Logdate] => Wed Jan 05 2011
[BackupSet] => bar202.az4_lvm
[StartTime] => 20110105040003
[Duration] => 0
[DBServer] => bar202.prop.az4.kaz.com
[Size] => 0
[Status] => incomplete)
Array ( [Server] => hostname10.prop.az2
[Logdate] => Thu Jan 06 2011
[BackupSet] => bar201_az2_lvm
[StartTime] => 20110106151622
[Duration] => 0
[DBServer] => bar201.prop.az2.kaz.com
[Size] => 0
[Status] => Backup failed )
Изменения кода для справки:
<?php
$defaults = array(
'Duration' => 0,
'Size' => 0,
'Status' => 'incomplete' );
$data = array();
$InputFile = file("test.txt");
foreach ($InputFile as $line){
preg_match_all("/([0-9])-([^=]+)=([^;]+);/", $line, $matches, PREG_SET_ORDER);
$LineData = array();
foreach ($matches as $information)
$LineData[$information[2]] = $information[3];
$data[] = array_merge($defaults, $LineData);
}
print_r($data);
?>