Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_String - Fatal编程技术网

Php 通过查找特定字符串来编辑文件中的行?

Php 通过查找特定字符串来编辑文件中的行?,php,arrays,string,Php,Arrays,String,我需要编辑文件中的某些特定行,但由于此文件是一个配置文件(用于Wi-Fi接入点),因此其某些行有时会编辑/删除/添加它们自己 所以我想知道是否可以先查找一个特定的字符串,然后编辑它 下面是一个片段(由另一个论坛上的某人提供): 这段代码编辑由$array[]显示的行,但正如我前面提到的,行实际上是在移动,所以我需要查找特定的字符串,而不是仅仅选择可能是错误的行 那么substr\u replace、strpbrk和/或strtr呢?您可以逐行搜索要替换的字符串。这只是一种方法,非常基本,因为

我需要编辑文件中的某些特定行,但由于此文件是一个配置文件(用于Wi-Fi接入点),因此其某些行有时会编辑/删除/添加它们自己

所以我想知道是否可以先查找一个特定的字符串,然后编辑它

下面是一个片段(由另一个论坛上的某人提供):


这段代码编辑由$array[]显示的行,但正如我前面提到的,行实际上是在移动,所以我需要查找特定的字符串,而不是仅仅选择可能是错误的行


那么substr\u replace、strpbrk和/或strtr呢?

您可以逐行搜索要替换的字符串。这只是一种方法,非常基本,因为您似乎对这一方法不熟悉。您甚至可以使用
match
函数或其他方法。有很多方法

使用
file
和/或
file\u put\u contents
功能不需要
fopen

$lines = file('file.cfg', FILE_IGNORE_NEW_LINES);

foreach ($lines as &$line) {
  $ligne = explode('=', $line);

  if ($ligne[1] === 'str to serach for') {
    $ligne[1] = 'replacement text';
    $line = implode('=', $ligne); 
  }
}

file_put_contents('file.cfg', implode(PHP_EOL, $lines));

您可以创建这样的替换数组,其中包含对“key”=>“new\u value”

$replacement = [
  'password' => 'new_pass',
  'SSID' => 'newSSID'
];
然后检查配置数组的当前行是否以该数组的键开头。如果是,请更换

foreach($array as &$value) {
    if(preg_match('/^(\w+)\s*=/', $value, $m) and 
       isset($replacement[$m[1]])) {
           remplace($value, $replacement[$m[1]]);
    }
}

关于要更新的文本,您知道什么-精确值、模式?使用
preg_grep
查找要更新的文本必须是随机生成的SSID和密码(如上所述,这是用于Wi-Fi接入点)以及一些参数(例如“启用/禁用”),这些参数都是值,但您知道参数的名称吗?是的,我知道它们的名称
foreach($array as &$value) {
    if(preg_match('/^(\w+)\s*=/', $value, $m) and 
       isset($replacement[$m[1]])) {
           remplace($value, $replacement[$m[1]]);
    }
}