Мне нужна помощь/экспертиза 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);
?>