如何从数组元素中获取后续元素?

时间:2015-09-23 16:39:40

标签: php arrays file

我正在尝试在文件中获取特定行,然后在其后接下来的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

3 个答案:

答案 0 :(得分:0)

此文件实际上采用.ini格式,因此您可以尝试使用log verification technique来阅读此内容。

$data = parse_ini_file('/etc/asterisk/sip1.conf', TRUE);

这为您提供了一个关联数组,您可以根据需要循环/搜索。

示例:parse_ini_file

答案 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]];

    }
}

示例:https://eval.in/438416