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

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数组中添加大括号
{}
,并使用它。我已经更新了答案以反映它