我正在尝试从文件中替换特定的字符串,但我无法。这是我的PHP代码:
<?php
session_start();
$name = $_GET["Username"];
$status = $_GET["Status"];
$username = "jois";
if($status == "Following"){
$filename = $username."/contacts.txt";
$contactList = file_get_contents($filename);
$object = json_decode($contactList,TRUE);
$array = $object["A"];
$str = json_encode($array);
$new = array('name' => 'Sumanth' );
array_push($array,$new);
$strArr = json_encode($array);
echo "str: ".$str."\n";
echo "strArr: ".$strArr."\n";
if( str_replace($str, $strArr, $contactList)){
echo str_replace($str, $strArr, $contactList);
}
else{
echo "couldnt find the match";
}
}
else{
}
?>
这是文件中的json:
{
"A":[
{
"name": "Aaron Paul"
}
],
"B":[
{
"name":"Beyonce"
}
]
}
修改
$str= [{"name":"Aaron Paul"}]
$strArr= [{"name":"Aaron Paul"},{"name":"Sumanth"}]
$contactList={ "A":[ { "name": "Aaron Paul" } ], "B":[ { "name":"Beyonce" } ] }
我想替换文件的内容。在这里,我试图替换数组A 中的内容。这是上面的代码我试图用新的String替换数组A的内容。但我无法保持不变。我没有得到任何错误。我能知道我哪里出错吗?
答案 0 :(得分:2)
您从我看到的代码中遇到一些问题。让我们回顾一下你要做的事情:
$str= [{"name":"Aaron Paul"}]
$strArr= [{"name":"Aaron Paul"},{"name":"Sumanth"}]
$contactList={ "A":[ { "name": "Aaron Paul" } ], "B":[ { "name":"Beyonce" } ] }
根据我的理解,您想要$str
,在$contactList
内搜索该特定字符串,然后用$strArr
替换该字符串的所有实例。我注意到的第一个问题是你没有正确使用str_replace()
。您需要使用通配符:%
来定义$str
的限制。例如:
//if you had the following string:
$string = 'abcdeafg';
//and you wanted to replace all the instances
//of 'a' with 'z'
$str1 = 'a';
$str2 = 'z';
//you would then need to use '%' as follows:
$result = str_replace("%{$str1}%", "{str2}", $string);
echo $result;//output: zbcdezfg
因此,在您的情况下,您的代码应如下所示:
$result = str_replace("%{$str}%", "{$strArr}", $contactList);
HOWEVER ,您的代码中还有其他问题。我注意到$str
内的字符串与$contactList
内的字符串不完全匹配,因为$contactList
内有其他空格。因此,您还必须完成以下两项操作(以及之前的代码更正:
以某种方式确保$contactList
内有与$str
完全相同的字符串。
或者使用regex
与preg_replace()
创建更高级的搜索,但这有点复杂,如果您不知道regex
将需要一些教程时间:)
已编辑:我刚刚注意到json_decode
上使用了$contactList
。如果您将json_decode
放在str_replace
函数之后并使用我的代码,那么$contactList
将不再有空格,并且该函数应该可以正常工作:)
答案 1 :(得分:0)
您可以更轻松地执行此操作:
$username = "jois";
if ($status == "Following") {
$filename = $username . '/contacts.txt';
$contacts = json_decode(file_get_contents($filename), true);
$contacts['A'] = array('name' => 'Sumanth');
file_put_contents($filename, json_encode($contacts));
}
如果您不确定PHP中的函数功能(例如json_decode
),您只需使用var_dump
查看变量包含的内容。