【问题标题】:Cannot assign an empty string to a string offset无法将空字符串分配给字符串偏移量
【发布时间】: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 arrays string


    【解决方案1】:

    这是因为您想在第一个元素处取消设置字符串。只需使用substr($fDomains, 1);

    【讨论】:

    • 它似乎不起作用:PHP 致命错误:未捕获错误:无法在 /postfixadmin/variables.inc.php:31 中取消设置字符串偏移量
    • var_dump($fDomains);
    • 可能你的 $fDomains 不是一个数组,而是一个字符串
    • 在 variables.php 中,有 2 行引用了这个变量 ($fDomains = "";) 和 ($fDomains[0] = "";) - 我不确定原因不过为了它。
    • substr 在需要执行繁重操作时性能很差
    【解决方案2】:

    ($fDomains = "";)($fDomains[0] = "";) 中的任何一个都是错误的,但是如果没有看到其余的代码,就不可能说 哪个 是错误的。

    如果$fDomains 是一个字符串,那么赋值$fDomains='' 将清空其内容。如果$fDomains是一个数组,应该初始化为$fDomains=array()而不是$fDomains=""$fDomains[0]=''是清除第一个元素字符串值的正确方法/em> 在数组中。

    实际上,您在评论中说明的两个分配(如本答案顶部的复制)都是错误的 - 括号表达式的末尾不应有分号 (;),除非您有一个 PHP 需要解释的字符串(例如,对于嵌入变量或转义序列),你应该使用单引号而不是双引号 - =""; 应该是 =''.

    【讨论】:

      【解决方案3】:

      此消息“PHP 警告:无法将空字符串分配给字符串偏移量”的原因是: 我的 $fDomains 变量是作为字符串启动的,而不是作为数组启动的。

      【讨论】:

      • 不知道为什么要添加推理,因为这个问题很久以前就已经解决了。
      • 我的原因是谷歌搜索对我的回复不是一个解决方案,因为我自己确实希望将索引变量用作数组而不是字符串(通常情况下),所以我不怀疑只是因为选择的答案有两票是通用的/完全正确的(如果有的话 - 有时会发生) - 如果像我这样的人追随我并且不会在这里找到答案 - 我必须对其进行 xdebug,在 phptester 上进行测试,然后来到偶然的解决方案 - 反复试验和常识,奇怪的是还没有回答类似的问题。后来我也看到了 Kris Roofe 的评论,但它没有作为答案发布
      • 是的,我需要将我的变量初始化为数组,而不是空字符串以避免此警告
      【解决方案4】:

      根据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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 2022-06-15
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多