我有一个问题是转换字符串响应fgets()...
响应是这样的......
Channel Context Extension Prio State Application Data CallerID Duration Accountcode PeerAccount BridgedTo
Agent/2704 outgoing 901261499329974 1 Up AppQueue (Outgoing Line) 901261499329974 00:02:28 SIP/pbx-load-balance
SIP/135-00005571 outgoing 90116567011298 17 Up Dial SIP/pbx-load-balancer/901 61290371819 00:17:40 SIP/pbx-load-balance
SIP/140-00005744 outgoing 90116562654777 17 Up Dial SIP/pbx-load-balancer/901 8884317666 00:00:03 (None)
SIP/144-00005741 outgoing 90116563334544 17 Up Dial SIP/pbx-load-balancer/901 8884317666 00:00:17 SIP/pbx-load-balance
SIP/pbx-load-balance outgoing 1 Up AppDial (Outgoing Line) 90116567011298 00:17:40 SIP/135-00005571
SIP/200-00005730 outgoing 901161384201116 17 Up Dial SIP/pbx-load-balancer/901 8884317666 00:01:28 SIP/pbx-load-balance
如何将其格式化为表格或至少格式化为数组格式...
谁来自这里?..非常感谢你!非常感谢!!!答案 0 :(得分:1)
它类似于csv文件,但是,似乎出现了多个空格。标题行似乎没有空格的字段名称。那么让我们找到场位置并计算场长。然后创建一个正则表达式,它只按长度获取字段。最后,我们修剪字段,删除不需要的空格。
$csv = <<< '_END_'
Channel Context Extension Prio State Application Data CallerID Duration Accountcode PeerAccount BridgedTo
Agent/2704 outgoing 901261499329974 1 Up AppQueue (Outgoing Line) 901261499329974 00:02:28 SIP/pbx-load-balance
SIP/135-00005571 outgoing 90116567011298 17 Up Dial SIP/pbx-load-balancer/901 61290371819 00:17:40 SIP/pbx-load-balance
SIP/140-00005744 outgoing 90116562654777 17 Up Dial SIP/pbx-load-balancer/901 8884317666 00:00:03 (None)
SIP/144-00005741 outgoing 90116563334544 17 Up Dial SIP/pbx-load-balancer/901 8884317666 00:00:17 SIP/pbx-load-balance
SIP/pbx-load-balance outgoing 1 Up AppDial (Outgoing Line) 90116567011298 00:17:40 SIP/135-00005571
SIP/200-00005730 outgoing 901161384201116 17 Up Dial SIP/pbx-load-balancer/901 8884317666 00:01:28 SIP/pbx-load-balance
_END_;
$lines = preg_split('~\r?\n~', $csv);
// word begin/end with no space behind (=word begin only)
preg_match_all('~\b(?>[^\s])~', $lines[0], $pos_fields, PREG_OFFSET_CAPTURE);
$pos_fields=$pos_fields[0];
$regexp = '';
$pos = $pos_fields[0][1];
// (.{10}) for a field width 10
for($i = 1; $i < count($pos_fields); $i++)
$regexp .= '(.{' . ($pos_fields[$i][1] - $pos_fields[$i - 1][1]) . '})';
$regexp = "/$regexp(.*)/";
$arr = [];
for($i = 0; $i < count($lines); $i++)
{
preg_match($regexp, $lines[$i], $line);
array_shift($line);
array_walk($line, function(&$val, $k) { $val= $arr[$k] = chop($val); });
$arr[] = $line;
}
var_dump($arr);