我收到了“PHP上的数组到字符串转换错误”;
我使用“变量”(应该是一个字符串)作为str_replace的第三个参数。所以总结(最简单的版本是什么):
$str = "very long string";
str_replace("tag", $some_other_array, $str);
$ str正在抛出错误,我一直试图修复它,我尝试的是:
if(is_array($str)) die("its somehow an array");
serialize($str); //inserted this before str_replace call.
我花了一整天的时间,并没有像错误的方式那样愚蠢的东西 - 这是奇怪的事情。我甚至把它转储到一个文件和一个字符串。
我的假设:
字符串太长,php无法处理它,变成数组。
在这种情况下,$ str值是嵌套的并递归调用,一般流程可以解释如下:
- 代码
//pass by reference
function the_function ($something, &$OFFENDING_VAR, $something_else) {
while(preg_match($something, $OFFENDING_VAR)) {
$OFFENDING_VAR = str_replace($x, y, $OFFENDING_VAR); // this is the error
}
}
因为str_replace可能会有些奇怪,但这意味着在某些时候str_replace必须返回一个数组。
请帮我解决这个问题,非常困惑,我浪费了一天的时间。
----原始功能代码-----
//This function gets called with multiple different "Target Variables" Target is the subject
//line, from and body of the email filled with << tags >> so the str_replace function knows
//where to replace them
function perform_replacements($replacements, &$target, $clean = TRUE,
$start_tag = '<<', $end_tag = '>>', $max_substitutions = 5) {
# Construct separate tag and replacement value arrays for use in the substitution loop.
$tags = array();
$replacement_values = array();
foreach ($replacements as $tag_text => $replacement_value) {
$tags[] = $start_tag . $tag_text . $end_tag;
$replacement_values[] = $replacement_value;
}
# TODO: this badly needs refactoring
# TODO: auto upgrade <<foo>> to <<foo_html>> if foo_html exists and acting on html template
# Construct a regular expression for use in scanning for tags.
$tag_match = '/' . preg_quote($start_tag) . '\w+' . preg_quote($end_tag) . '/';
# Perform the substitution until all valid tags are replaced, or the maximum substitutions
# limit is reached.
$substitution_count = 0;
while (preg_match ($tag_match, $target) && ($substitution_count++ < $max_substitutions)) {
$target = serialize($target);
$temp = str_replace($tags,
$replacement_values,
$target); //This is the line that is failing.
unset($target);
$target = $temp;
}
if ($clean) {
# Clean up any unused search values.
$target = preg_replace($tag_match, '', $target);
}
}
答案 0 :(得分:0)
您如何知道$str
是问题,而不是$some_other_array
?
来自manual:
如果搜索和替换是数组,则str_replace()接受一个值 从每个数组中使用它们来搜索和替换主题。如果 replace比搜索值少,然后使用空字符串 其余的替换值。如果search是一个数组,则replace是a string,然后这个替换字符串用于每个值 搜索。 反过来没有意义,但。
如果第一个参数也是第二个参数,那么它只能是一个数组。