我有一个像这样的php数组:
$_0xb29b = ['item1','item2','item3'];
我有一个像这样的文本文件
_0xb29b[0] foo foo foo foo foo foo _0xb29b[2]
你们能告诉我如何用数组中的正确项目替换文本文件中的_0xb29b[0]
吗?我希望文本是这样的:
item1 foo foo foo foo foo foo item3
答案 0 :(得分:2)
<?php
// header('Content-Type: text/plain; charset=utf-8');
$str = '_0xb29b[0] foo foo foo foo foo foo _0xb29b[2], _0xb29b[xxx]';
$_0xb29b = ['item1','item2','item3', 'xxx' => 5];
$result = preg_replace_callback(
'/\_0xb29b\[([^\]]+)\]/',
function($matches)use($_0xb29b){
return $_0xb29b[$matches[1]];
},
$str
);
echo $result;
?>
节目:
item1 foo foo foo foo foo foo item3, 5
注意:要将文件内容作为字符串获取,建议您阅读file_get_contents()
上的手册。
答案 1 :(得分:0)
我花了太多时间让这个工作不发布。不使用preg_match,但几乎可以复制它。首先,它从变量名称创建针。然后,使用substr_count和strpos在haystack中搜索针。然后使用找到的针的位置和针的长度来获取变量的索引,并使用用于创建针的变量的数组替换。指向底部所有来源的链接。
<?php
function print_var_name($var) {
foreach($GLOBALS as $var_name => $value) {
if ($value === $var) {
return $var_name;
}
}
return false;
}
$_0xb29b = array('item1','item2','item3');
$needle = print_var_name($_0xb29b);
$needle_length = strlen($needle);
$haystack = '_0xb29b[0] foo foo foo foo foo foo _0xb29b[2]';
$haystack_height = strlen($haystack);
$num_needles = substr_count($haystack,$needle) . '<br />';
if($num_needles>0){
$offset = 0;
for($i=0;$i<$num_needles;$i++){
$needle_pos[$i] = strpos($haystack,$needle,$offset);
$needle_index[$i] = substr($haystack,$needle_pos[$i]+$needle_length+1,1);
if($needle_pos[$i]+$needle_length+3<$haystack_height){
$haystack = substr($haystack,0,$needle_pos[$i]). ' ' .${$needle}[$needle_index[$i]] . ' ' . substr($haystack,$needle_pos[$i]+$needle_length+3);
} else {
$haystack = substr($haystack,0,$needle_pos[$i]). ' ' .${$needle}[$needle_index[$i]];
}
$offset = $needle_pos[$i]+1;
}
}
echo $haystack;
?>
[变量变量] [1]用于将字符串变回变量,变量是一个数组并使用
${$needle}[index]
调用数组索引
http://php.net/manual/en/language.variables.variable.php
http://php.net/manual/en/function.substr.php
http://php.net/manual/en/function.strpos.php
http://php.net/manual/en/function.substr-count.php
How to get a variable name as a string in PHP?