从数组索引中提取值的特定部分

时间:2012-02-24 01:19:41

标签: php arrays

我有当前的代码

$trace = exec("tracert 192.168.0.1", $outcome, $status);

print_r($outcome);

输出如下数组:

Array ( [0] => [1] => Tracing route to 192.168.0.1 over a maximum of 30 hops [2] => [3] => 1 <1 ms <1 ms <1 ms 192.168.1.1 [4] => 2 5 ms 4 ms 4 ms 192.168.0.1 [5] => [6] => Trace complete. )

现在我特别想要的是元素3和4中的延迟值(ms)。我可以使用print_r($ outcome [3])来获取这些,例如输出:

1 <1 ms <1 ms <1 ms 192.168.1.1

然而,我想要的只是'<1ms <1ms <1ms'位。

最好的方法是什么?请记住,这只是一个例子,这些值可能会发生变化。

非常感谢任何建议或意见!谢谢:))

5 个答案:

答案 0 :(得分:2)

使用正则表达式:

<?[0-9]+ ?ms

确认here

答案 1 :(得分:0)

你可能需要调整一下,但这是一个开始:

此外,这适用于原始输出,而不是数组。我会将exec()更改为system()并使用输出缓冲区捕获输出。或者,您可以修改代码并在exec。

的数组的每一行上使用preg_match
preg_match_all('/(<?[0-9]+ ms <?[0-9]+ ms <?[0-9]+ ms)/i', $subject, $result, PREG_PATTERN_ORDER);

答案 2 :(得分:0)

使用strrpos可以查找字符串中最后一次出现的子字符串的位置。因此,如果你知道它总是输出'ms'作为最后一次出现,你可以使用:

$last_occurrence = strrpos($outcome[3], ' ms');

返回字符串的第一个(但多个)字符:

$adjusted_string = substr($outcome[3], 0, $last_occurrence);

修改

摆脱第一个角色:

echo substr($adjusted_string, 1);

所以,如果你想将它们组合在一起:

echo substr(substr($outcome[3], 0, strrpos($outcome[3], ' ms')), 1);

答案 3 :(得分:0)

如果它保持相同的模式,你可以

list(,$l1,$lu1,$l2,$lu2,$l3,$lu3,) = explode(" ", $outcome[3]);
echo $l1.$lu1.' '.$l2.$lu2.' '.$l3.$lu3;

在此处查看:http://codepad.org/RwfeGusi

答案 4 :(得分:0)

希望这会有所帮助:

// create array to store the results
$result = array();

// loop through all lines of the outcome
foreach ($outcome as $line)
{
    // continue to the next line if there is no "ms" information in the line
    if (strpos($line, 'ms') === FALSE)
    {
        continue;
    }

    // remove the initial number (counter) from the line
    $line = ltrim($line, '0123456789');

    // split the string in pieces
    $latency_values = explode(' ms ', $line);

    // throw away the latest element (IP address)
    array_pop($latency_values);

    // remove surrounding white spaces
    $latency_values = array_map('trim', $latency_values);

    // add to our result array
    $result[] = $latency_values;
}

// output the result
print_r($result);

此解决方案使用: