PHP代码背后的逻辑

时间:2017-04-17 16:18:05

标签: php variables get substring

我无法理解以下代码背后的逻辑:

初始代码

            <?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);

但是,这不会返回任何结果。为了将来的使用,我希望能够进一步操作以再次返回不同的结果,在这种情况下,任何有关如何使用此方法的解释将不胜感激。

1 个答案:

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