2016-02-09 4 views
-1

У меня есть этот кусок PHP кода, который дает мне ошибку:предупреждение Нелегальная строка смещение в PHP

Warning: Illegal string offset 'mod_modulecode' in C:\xampp\htdocs\MP\multi\functions.php on line 29

Это код, который выдается предупреждение в отношении:

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"]) 
       ) {...................' 

Любая помощь был бы весьма признателен.

+0

В массиве '$ menus' содержится ключ' mod_modulecode'? Если он содержит, то ваш цикл пытается получить доступ к следующему элементу до последнего, который не существует. Если это так, то в вашем цикле '$ i <$ c - 1' попробуйте это – Haridarshan

+0

вы можете распечатать свой массив, прежде чем использовать его в цикле, я сомневаюсь, что ваши ключи массива не цитируются как строка. –

+0

Похоже, что '$ menus' - это строковый массив, а не многомерный массив. – SOFe

ответ

0

Что 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');

Смежные вопросы