我无法理解以下代码背后的逻辑:
初始代码
<?php
$output_arr=array();
$handle = fopen("../etc/init.d/bandwidthlimiters/rulestest", "r");
if ($handle) {
$i=1;
while (($line = fgets($handle)) !== false) {
$test_string=$line;
$test_string=str_replace(" htb rate ","@@",$test_string);
$test_string=str_replace("kbit ceil ","@@",$test_string);
$tmp = explode("@@", $test_string);
array_push($output_arr,$tmp[1]);
$i++;
}
fclose($handle);
} else {
// error opening the file.
}
echo $output_arr[5]
?>
目前,echo $output_arr[5]
在列出的文件来源中提供了打印值“5
”。文件内容如下所示,在“新输出”下。
新输出
我希望它能够根据以下术语获取结果,而不是查找" htb rate "
和"kbit ceil"
之间的值:" ceil "
和"kbit"
tc class add dev br-lan parent 1:1 classid 1:2 htb rate 1kbit ceil 11111kbit
tc class add dev br-lan parent 1:1 classid 1:3 htb rate 2kbit ceil 22222kbit
tc class add dev br-lan parent 1:1 classid 1:4 htb rate 3kbit ceil 33333kbit
tc class add dev br-lan parent 1:1 classid 1:5 htb rate 4kbit ceil 44444kbit
tc class add dev br-lan parent 1:1 classid 1:6 htb rate 5kbit ceil 55555kbit
通过使用上面的示例行,新结果应该检索“55555
”,而不是原始的“5
”
修改后的版本
我尝试过修改,如下所示:
$test_string=str_replace(" ceil ","@@",$test_string);
$test_string=str_replace("kbit","@@",$test_string);
但是,这不会返回任何结果。为了将来的使用,我希望能够进一步操作以再次返回不同的结果,在这种情况下,任何有关如何使用此方法的解释将不胜感激。
答案 0 :(得分:1)
您的修改导致此值$test_string
:
tc class add dev br-lan parent 1:1 classid 1:6 htb rate 5@@@@55555@@
请注意,在要检索的字段之前有两个@@
序列。第一个来自替换kbit
,第二个来自替换ceil
。当你爆炸它时,你得到:
array(4) {
[0]=>
string(57) "tc class add dev br-lan parent 1:1 classid 1:6 htb rate 5"
[1]=>
string(0) ""
[2]=>
string(5) "55555"
[3]=>
string(1) "
"
}
所以55555
位于$tmp[2]
,而不是$tmp[1]
。