2016-02-11 1 views
0

Я пытаюсь исправить некоторые ошибки в программе, что я новичок в:PHP Warning: Illegal строка Смещение «Тег»

if (strtoupper($xmlnode["tag"])=="RANDOM"){ 

    $liarray=array(); 

    $children = $xmlnode["children"]; 

    for ($randomc=0;$randomc<sizeof($children);$randomc++){ 
     if (strtoupper($children[$randomc]["tag"]) == "LI"){ 
      $liarray[]=$randomc; 
     } 
    } 

На strtoupper($children[$randomc]["tag"]) я получаю ошибку:

Warning: Illegal string offset 'tag' 

Почему это происходит и как я могу это исправить? При необходимости я могу добавить дополнительный код.

+0

'$ xmlnode' не имеет элемента 'tag'. Сделайте 'var_dump ($ xmlnode)', чтобы увидеть, что внутри – fusion3k

+0

'$ xmlnode' не является массивом, это строка. Возможно, вам захочется изучить функцию, чтобы разбить ее на массив. – Matt

ответ

1

Ваш $xmlnode['children'] - это строка, а не массив.

Он ищет что-то структурированы как:

$xmlnode['children'] = [ 
          ['tag' => 'LI'], 
          ['tag' => 'LU'], 
          ['tag' => 'LA'], 
          ['tag' => 'LO'], 
          ['tag' => 'LE'], 
          ['tag' => 'LR'], 
         ]; 

Но вы на самом деле дает ему что-то вроде $xmlnode['children'] = "I am a string";

EDIT: Полный ответ:

Сначала необходимо проверить, если текущий элемент в массив $xmlnode['children'] представляет собой массив, а не строку, а затем обрабатывает только ключи, которые являются массивом.

$xmlnode['tag'] = 'RANDOM'; 
$xmlnode['children'] = array(
    " ", 
    array(
     'tag' => 'li', 
     'attributes' => "", 
     'value' => "Tell me a story." 
    ), 
    " ", 
    array(
     'tag' => 'li', 
     'attributes' => "", 
     'value' => "Oh, you are a poet." 
    ), 
    " ", 
    array(
     'tag' => 'li', 
     'attributes' => "", 
     'value' => "I do not understand." 
    ), 
    " " 
); 

$liarray = array(); 
if (strtoupper($xmlnode["tag"]) == "RANDOM") { 

    $children = $xmlnode["children"]; 

    for ($randomc=0; $randomc < sizeof($children); $randomc++) { 
     if (is_array($children[$randomc])) { 
      if (strtoupper($children[$randomc]["tag"]) == "LI") { 
       $liarray[] = $randomc; 
      } 
     } 
    } 
    print_r($liarray); 
} 
+0

Это часть var_dump: {[0] => string (1) "" [1] => array (3) {["tag"] => string (2) "li" ["attributes"] = > string (0) "" ["value"] => string (16) «Расскажи мне историю». } [2] => string (1) "" [3] => array (3) {["tag"] => string (2) "li" ["attributes"] => string (0) "" [ «value»] => string (19) «О, ты поэт». } [4] => string (1) "" [5] => array (3) {["tag"] => string (2) "li" ["attributes"] => string (0) "" [ "value"] => string (20) «Я не понимаю». } [6] => string (1) "" – heyitsmyusername

+0

Спасибо за информацию, я предоставил рабочий образец вашей проблемы с рабочим решением. – Emylee

+0

Спасибо, что решает ошибку. Надеюсь, я не подниму большую проблему под ковром. – heyitsmyusername