【问题标题】:Warning Illegal string offset in PHP [duplicate]警告 PHP 中的非法字符串偏移 [重复]
【发布时间】:2016-02-09 06:58:34
【问题描述】:

我有这段 PHP 代码给了我错误:

警告:第 29 行 C:\xampp\htdocs\MP\multi\functions.php 中的非法字符串偏移 'mod_modulecode'

这是与警告相关的代码:

function set_rights($menus, $menuRights) {
    $data = array();
    for ($i = 0, $c = count($menus); $i < $c; $i++) {
        $row = array();
        for ($j = 0, $c2 = count($menuRights); $j < $c2; $j++) {
            if ($menuRights[$j]["rr_modulecode"] == $menus[$i]["mod_modulecode"]) {
                if (authorize($menuRights[$j]["rr_create"]) || authorize($menuRights[$j]["rr_edit"]) ||
                        authorize($menuRights[$j]["rr_delete"]) || authorize($menuRights[$j]["rr_view"])
                ) {...................'

任何帮助将不胜感激。

【问题讨论】:

  • 您的$menus 数组是否包含mod_modulecode 键?如果它包含,那么您的循环正在尝试访问下一个元素到最后一个不存在的元素。如果是这样,在你的循环中$i &lt; $c - 1 试试这个
  • 你能在循环使用之前打印你的数组吗,我怀疑你的数组键没有被引用为字符串。
  • 看来$menus是字符串数组,而不是多维数组。
  • $menus[$i] 是一个字符串,而不是一个数组,因此只有数字偏移量。

标签: php arrays string offset


【解决方案1】:

PHP 的意思是在某个迭代中

if ($menuRights[$j]["rr_modulecode"] == $menus[$i]["mod_modulecode"]) {

$menus[$i] 是一个字符串,而不是一个数组,并且您正试图像一个包含键 mod_modulecode 的数组一样访问它。

为了帮助追踪这个错误,我建议:

if(is_string($menus[$i]) {
    var_dump('string bug','i',$i,'j',$j,'$menus[$i]',$menus[$i]);
}
if ($menuRights[$j]["rr_modulecode"] == $menus[$i]["mod_modulecode"]) {

或者更好的是,如果你安装了xdebug,它会在抛出未捕获的异常时显示局部变量:throw new Exception('string bug');

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 2013-04-22
    • 1970-01-01
    • 2013-04-11
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多