Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP查找并替换多个类似的条目_Php_Search_Replace - Fatal编程技术网

PHP查找并替换多个类似的条目

PHP查找并替换多个类似的条目,php,search,replace,Php,Search,Replace,我有一个包含大约60行的文本文件。其中有两行: DeviceIP 10.0.0.1 DeviceIP 10.2.36.4 我有一个PHP表单,它有$device1&$device2 如何在文件中查找和替换,将第一个DeviceIP替换为$device1,将第二个替换为$device2 很明显,IP地址会改变,所以我无法搜索这些地址。我知道如何在一场比赛中做到这一点,但不是多次 谢谢仅替换第一次出现的: $str = file_get_contents('yourtextfile.txt');

我有一个包含大约60行的文本文件。其中有两行:

DeviceIP 10.0.0.1
DeviceIP 10.2.36.4
我有一个PHP表单,它有
$device1
&
$device2

如何在文件中查找和替换,将第一个DeviceIP替换为$device1,将第二个替换为$device2

很明显,IP地址会改变,所以我无法搜索这些地址。我知道如何在一场比赛中做到这一点,但不是多次


谢谢

仅替换第一次出现的:

$str = file_get_contents('yourtextfile.txt');

$str = str_replace("DeviceIP", $device1, $str, 1); // Replace only first occurrence

$str = str_replace("DeviceIP", $device2, $str, 1); // Replace second occurrence

file_put_contents('yourtextfile', $str);
这似乎有效:

$test = file('test');
$result = ''; $count ='1';
foreach($test as $v) {
    if (substr($v,0,8) == 'DeviceIP' && $count =='1') {
        $result .= "DeviceIP $device1\n"; $count++;
    } elseif (substr($v,0,8) == 'DeviceIP' && $count =='2') {
        $result .= "DeviceIP $device2\n";
    } else {
        $result .= $v;
    }
}
file_put_contents('test', $result);
但是这是最好的方法吗?

你可以这样试试

           $arr=array('10.0.0.10','10.22.32.12');
            $handle = fopen("test.txt", "r");
            $str="";
            if ($handle) {
                $count=0;
                while (($buffer = fgets($handle, 4096)) !== false) {
                    if(preg_match("/DeviceIP/", $buffer)){
                        $str.= "DeviceIP ".$arr[$count];
                        $str.="\n";
                    }
                    $count++;
                }
                if (!feof($handle)) {
                    echo "Error: unexpected fgets() fail\n";
                }
                fclose($handle);
            }
            file_put_contents('test',$str);
它将用数组值替换字符串引用。
这是逐行读取并替换匹配,我认为这很好。

IMHO这不是OP要求的,因为他想更改IP而不是字符串DeviceIP,所以stru替换将不起作用(这里有regex的味道,但你不能仅用regex更改第n次出现)@Chizzle这是我想更改的IP地址,而不是DeviceIP。如果文件的IP地址以换行符分隔,您可以使用file()。检查一下关于逐行循环的答案:看看这一个你想用$device1值替换IP地址(10.0.0.1)吗?是的,这就是我要做的。每次你检查子字符串和计数时都在这里。最好逐行读取文件并替换所需内容