我想有一个函数可以返回最好的多维数组的关联数组。我将整个输出分为三个部分,以便更好地阅读。
解析此类文本的最佳方法是什么?输出就像
$output = array
(
"18"=>array(
"type"=>"backup",
"name"=>"PLC",
"Description"=>"offline db",
"state"=>"Executing",
"Start Time"=>"05/16/2012 10:55:45.240272"
),
"17"=>array(
"type"=>"restore",
"name"=>"TYNDALE",
"Description"=>"db",
"state"=>"Executing",
"Start Time"=>"05/16/2012 10:49:53.340805"
),
"15"=>array(
"type"=>"restore",
"name"=>"carinya",
"Description"=>"automatic incremental db",
"state"=>"Executing",
"Start Time"=>"05/16/2012 10:48:21.423945"
)
);
第一节+两节+三节从linux命令db2 list utilities show detail
返回。所以它将是php中的一系列行。
第一节
ID = 18
Type = BACKUP
Database Name = PLC
Partition Number = 0
Description = offline db
Start Time = 05/16/2012 10:55:45.240272
State = Executing
Invocation Type = User
Throttling:
Priority = Unthrottled
Progress Monitoring:
Estimated Percentage Complete = 0
Total Work = 3320093100 bytes
Completed Work = 255380 bytes
Start Time = 05/16/2012 10:55:45.240303
第二部分
ID = 17
Type = RESTORE
Database Name = TYNDALE
Partition Number = 0
Description = db
Start Time = 05/16/2012 10:49:53.340805
State = Executing
Invocation Type = User
Progress Monitoring:
Completed Work = 117444608 bytes
Start Time = 05/16/2012 10:49:53.340819
第三部分
ID = 15
Type = RESTORE
Database Name = CARINYA
Partition Number = 0
Description = automatic incremental db
Start Time = 05/16/2012 10:48:21.423945
State = Executing
Invocation Type = User
Progress Monitoring:
Phase Number = 1
Total Work = 16781312 bytes
Completed Work = 16781312 bytes
Start Time = 05/16/2012 10:48:21.423954
Phase Number [Current] = 2
Description = 20120513023104
Completed Work = 272633856 bytes
Start Time = 05/16/2012 10:48:23.502822
Phase Number = 3
Description = 20120514021520
Completed Work = 0 bytes
Start Time = Not Started
答案 0 :(得分:0)
所以我使用的代码是
function db2listutilities(){
global $db2Path;
$status = array();
$ProgressMonitoring=false;
$cmd = $db2Path . "db2 list utilities show detail" ;
unset($output);
exec($cmd, $output);
foreach ($output as $line){
if( strpos($line,'Progress Monitoring:') !== false ){
$ProgressMonitoring=true;
}
$tmp_array=explode("=", $line);
if (count($tmp_array)>1){
switch (trim($tmp_array[0])) {
case 'ID':
$id=$tmp_array[1];
$ProgressMonitoring=false;
break;
case 'Type':
$status[$id]['Type']=$tmp_array[1];
break;
case 'Database Name':
$status[$id]['Database Name']=$tmp_array[1];
break;
case 'Description':
if (!$ProgressMonitoring) {$status[$id]['Description']=$tmp_array[1];}
break;
case 'Start Time':
if (!$ProgressMonitoring) {$status[$id]['Start Time']=$tmp_array[1];}
break;
case 'State':
$status[$id]['State']=$tmp_array[1];
break;
}
}
}
$return=array();
foreach ($status as $st) {
$return[] = $st['Database Name']." - ".strtolower($st['Type'])." - ".$st['State']." - ".date("H:i",strtotime($st['Start Time']))."<BR>";
}
return implode("",$return);
}