【发布时间】:2017-05-21 01:02:01
【问题描述】:
我刚刚安装了 PHP 7.1,现在我看到了这个错误:
PHP Warning: Cannot assign an empty string to a string offset in /postfixadmin/variables.inc.php on line 31
第 31 行:
$fDomains[0] = "";
现在如何在 PHP 7.1 中清除 $fDomains[0]?
【问题讨论】:
我刚刚安装了 PHP 7.1,现在我看到了这个错误:
PHP Warning: Cannot assign an empty string to a string offset in /postfixadmin/variables.inc.php on line 31
第 31 行:
$fDomains[0] = "";
现在如何在 PHP 7.1 中清除 $fDomains[0]?
【问题讨论】:
这是因为您想在第一个元素处取消设置字符串。只需使用substr($fDomains, 1);
【讨论】:
substr 在需要执行繁重操作时性能很差
($fDomains = "";) 或($fDomains[0] = "";) 中的任何一个都是错误的,但是如果没有看到其余的代码,就不可能说 哪个 是错误的。
如果$fDomains 是一个字符串,那么赋值$fDomains='' 将清空其内容。如果$fDomains是一个数组,应该初始化为$fDomains=array()而不是$fDomains="",$fDomains[0]=''是清除第一个元素字符串值的正确方法/em> 在数组中。
实际上,您在评论中说明的两个分配(如本答案顶部的复制)都是错误的 - 括号表达式的末尾不应有分号 (;),除非您有一个 PHP 需要解释的字符串(例如,对于嵌入变量或转义序列),你应该使用单引号而不是双引号 - =""; 应该是 =''.
【讨论】:
此消息“PHP 警告:无法将空字符串分配给字符串偏移量”的原因是:
我的 $fDomains 变量是作为字符串启动的,而不是作为数组启动的。
【讨论】:
根据bug #71572,不允许分配空字符串。然后使用:
substr(fDomains,1); //like Kris Roofe wrote;
或使用这样的解决方案:
$fDomainsTmp = $fDomains;
for($x = 0 ; $x < length($fDomains); $x ++){
if(condition character allow in string){
$fDomainsTmp .= $fDomains[$x];
}
}
$fDomains = $fDomainsTmp;
【讨论】: