【问题标题】:PHP Undefined Offset unless printed outPHP 未定义的偏移量,除非打印出来
【发布时间】:2013-09-18 09:06:15
【问题描述】:

在尝试从套接字读取数据时,通过解释器运行以下代码:

function get_song_title($stream){
    $song;
    $sc_return = array();
    $sc_return = explode("\r\n",$stream);
    $song = $sc_return[4];
    return $song;
}

这可能会在 20% 的时间里成功获取我需要的信息。

但是当我这样做时:

function get_song_title($stream){
    $song;
    $sc_return = array();
    $sc_return = explode("\r\n",$stream);
    echo $sc_return[4];
    $song = $sc_return[4];
    return $song;
}

它会在 100% 的时间内成功。任何打印数组(或其元素)的方法都可以使其正常工作。如果我只是尝试返回或分配它,则会出现未定义的偏移量 4 消息。

这也包括使用 print_r($sc_return);这将永远成功。

知道为什么我需要将数组元素打印出来才能一直成功吗?

【问题讨论】:

    标签: php arrays undefined offset


    【解决方案1】:

    不确定为什么需要 echo / print out 才能工作,但是...

    试着去做

    var_dump($sc_rturn);
    

    看看你得到了什么。

    还要检查未定义的索引,你应该这样做

    isset($sc_return[4]);
    

    您也可以使用计算结果

    count($sc_return);
    

    【讨论】:

    • 正如问题中所说:如果元素存在与否无关紧要,它显然总是存在,但问题似乎是当你回显元素然后返回它时它总是有效但是当你没有先回显它就返回它,它只是有时有效
    • 我按照 stackoverflow 上的其他 PHP 未定义偏移错误帖子尝试了所有这些。但是,如果没有打印,isset() 和 var_dump() 仍有 80% 的时间会出错。
    • 请注意,如果您在没有 \r\n 的情况下分解字符串“ABCDEFG”,您将得到一个包含单个值的数组。是否有任何函数正在使用失败的返回值?你能加一张额外的支票吗? if (count($sc_return)
    • 如果explode 返回单个值,它不会在回显后打印出第四个偏移量,它会不断返回一个未定义的偏移量。这也会导致 print_r 打印出单个元素。
    • explode 将返回一个包含 1 个元素的数组,是的,但我仍然对 echo 修复问题感到困惑......
    猜你喜欢
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多