PHP使变量和值成为数组的一部分
我目前有这个功能在文本文件中搜索和替换PHP使变量和值成为数组的一部分,php,arrays,variables,foreach,Php,Arrays,Variables,Foreach,我目前有这个功能在文本文件中搜索和替换 // Input $ect = array('Visssa', 'Lisssa', 'her'); // Placeholders in the file $put = array('lname', 'fname', 'hisher'); // Replace the placeholders $oput = str_replace($put, $ct, 'tmpfile.txt'); 这不是完整的程序,但其思想是将tmpfile.txt中的值替
// Input
$ect = array('Visssa', 'Lisssa', 'her');
// Placeholders in the file
$put = array('lname', 'fname', 'hisher');
// Replace the placeholders
$oput = str_replace($put, $ct, 'tmpfile.txt');
这不是完整的程序,但其思想是将tmpfile.txt中的值替换为$etc数组中的值。而且它工作得完美无瑕
但是,我需要做的是获取所有传递的变量(get/post),然后生成数组,以便变量是要替换的值,值是要替换的值
所以,如果我发送了url
文件中lname的所有实例都将替换为tom,ogre的所有实例都将替换为yes
因此,它只是以某种方式获取get/post中传递的任何/所有变量,然后上面显示的数组将导致var被文件中的值替换 这样做:
$etc = array_keys($_GET);
array_walk($etc,"addBraces");
$put = array_values($_GET);
$oput = str_replace($etc, $put, 'tmpfile.txt');
function addBraces(&$item)
{
$item = "{".$item."}";
}
当然,所有常规的“总是对数据进行santize/escape”等…parse_str()将非常适合于此
function addreplacetokens(&$input)
{
$input = '{' . $input . '}';
}
$string = 'word {lname} word {fname} word {hisher} word';
$filter = array('lname','fname','hisher');
parse_str($_SERVER['QUERY_STRING'],$replacements);
foreach($replacements as $key => $value)
if(in_array($key,$filter) == false)
unset($replacements[$key]);
// this next block can be removed if you don't want a default
foreach($filter as $key)
if(array_key_exists($key,$replacements) == false)
$replacements[$key] = ''; // change this!
// copy the array so the keys can be filtered
$replacements_keys = array_keys($replacements);
array_walk($replacements_keys,'addreplacetokens');
$string = str_replace($replacements_keys,$replacements,$string);
echo $string;
那么?lname=hello将输出
单词你好单词
下一个问题是,是否需要处理单词边界?foreach($\u请求为$key=>$value){echo'key='.$key.
;echo'value='.$value;}您可能需要在占位符值上筛选$replacements,但在从查询字符串中解析$replacements以仅隔离所需的替换之后。请参阅我的修订代码,它有一个筛选器数组,以便可以忽略其他查询字符串参数。第一个方法有效,我理解过滤器,因此只替换想要的文本。。。有没有办法让它简单地寻找某种“标记”呢。所以?lname=hello并不替换lname的所有实例,而是替换{lname}的所有实例。这样,只有标有{variable}的实际可替换变量才会被替换,因此,如果有人将?the=cat放入文本文件,则不会替换的所有实例,除非在文本文件中标记为{the}?其思想是不必编辑php文件,而只需编辑文本文件。所以filter方法不会实现这一点,但是一个“mark”会实现。在我的编辑中,我已经将它更改为一个令牌系统,其中“{lname}”是令牌,而不仅仅是“lname”。这似乎并没有替换变量。当然,我尝试了$_REQUEST,而不是$_GET。现在这个方法开始工作了,最后一行改为:$oput=str_replace($etc,$put,'tmpfile.txt');但是,与下面的问题相同-如果我想自动将每个var_键括在{}中,使其只替换文本文件中括起来的{values}。。。怎么做?lname=hello将替换文本文件中lname的所有实例,但它如何自动将其括起来,以便将{lname}的所有实例替换为hello,而不使用非{enclosed}lname?@Chris:您需要在etc数组中添加大括号
{}
,并使用它。我已经更新了答案以反映它