我正在尝试在文件中获取特定行,然后在其后接下来的2行。我怎样才能获得下两行?以下是我的代码和文件。
$context = 'context=regencyoutgoing';
$lines = file('/etc/asterisk/sip1.conf');
foreach($lines as $line)
{
$find_context = strpos($line, $context);
if($find_context !== false){
echo $line;
}
}
这是我的sip1.conf
:
[000201891]
type=friend
context=regencyoutgoing
username=000201891
callerid = <000201891>
host=dynamic
secret=198
[000202222]
type=friend
context=regencyoutgoing
username=000202222
callerid = <000202222>
host=dynamic
secret=2000
答案 0 :(得分:0)
此文件实际上采用.ini
格式,因此您可以尝试使用log verification technique来阅读此内容。
$data = parse_ini_file('/etc/asterisk/sip1.conf', TRUE);
这为您提供了一个关联数组,您可以根据需要循环/搜索。
答案 1 :(得分:0)
这应该适合你:
首先,我们得到所有数组元素,其中$context
包含preg_grep()
。在你的例子中是这样的:
Array
(
2 => context=regencyoutgoing
12 => context=regencyoutgoing
)
在此之后,我们使用array_keys()
获取数组的键。然后我们简单地遍历所有键,并使用array_slice()
为每个键获取3个元素的片段,然后我们使用array_merge()
将其合并到结果数组中。
代码:
<?php
$lines = file("/etc/asterisk/sip1.conf");
$context = "context=regencyoutgoing";
$matchedKeys = array_keys(preg_grep("/" . preg_qute($context, "/") ."/", $lines));
$result = [];
foreach($matchedKeys as $key)
$result = array_merge($result, array_slice($lines, $key, 3));
print_r($result);
?>
答案 2 :(得分:0)
试试这个
$result=[];
foreach($lines as $i => $line)
{
$find_context = strpos($line, $context);
if($find_context !== false){
$result=[$lines[$i],$lines[$i+1],$lines[$i+2]];
}
}