Php替换字符串不起作用

时间:2016-05-26 07:38:37

标签: php

我正在尝试从文件中替换特定的字符串,但我无法。这是我的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的内容。但我无法保持不变。我没有得到任何错误。我能知道我哪里出错吗?

2 个答案:

答案 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完全相同的字符串。

  • 或者使用regexpreg_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查看变量包含的内容。