Использование смещения строки из переменной Error

Я получаю сообщение об ошибке при доступе к массиву со смещением строк. Массив выглядит примерно так:

$array = array(
                    "first" => array("one","two","three"),
                    "second" => array("blabla"),
                    "third" => array("something","else"),
                    "fourth" => array("next","nextnext","nextnextnext")
    );

Я пытаюсь получить один из внутренних массивов в зависимости от имеющейся у меня строки и использую эту строку как смещение, например:

$curArray = $array[$this->string];

Но каждый раз, когда я запускаю скрипт, я получаю сообщение об ошибке в этой строке. Не могли бы вы сказать мне, почему? Я получаю сообщение об ошибке «Недопустимый тип смещения». Спасибо


person Michal Artazov    schedule 29.01.2013    source источник
comment
Что такое $this? Что такое $this->string?   -  person Niet the Dark Absol    schedule 29.01.2013
comment
Например, чтобы вызвать третий массив, вы должны использовать что-то вроде этого $curArray = $array["third"];   -  person HamZa    schedule 29.01.2013
comment
ну, код является частью функции класса, поэтому $this->string относится к значению свойства $string объекта   -  person Michal Artazov    schedule 29.01.2013
comment
Попробуйте var_dump($this->string); и проверьте, что в нем содержится   -  person HamZa    schedule 29.01.2013
comment
он содержит во всех случаях что-то вроде этого object(SimpleXMLElement)#7 (1) { [0]=> string(3) "second" }   -  person Michal Artazov    schedule 29.01.2013
comment
var_dump($this-›string); даст вам его тип, просто повторяя его, вы не сможете сказать, какой это тип.   -  person GGio    schedule 30.01.2013
comment
@MichalArtazov Этот объект не является строкой, поэтому его нельзя использовать в качестве ключа. Я обновил свой ответ, но вы должны преобразовать его в строку, прежде чем использовать его в качестве ключа массива.   -  person Jim    schedule 30.01.2013


Ответы (2)


Очень вероятно, что $this->string не то, что вы думаете. Эта ошибка вызвана тем, что в качестве ключа массива используется не строка или число.

если вы сделаете var_dump($this->string);, вы сможете увидеть, каково значение на самом деле.

Редактировать: SimpleXMLElement является объектом и поэтому не может использоваться в качестве ключа массива. Вы можете привести его к строке следующим образом:

$key = (string)$this->string;
$curArray = $array[$key];
person Jim    schedule 29.01.2013

Значение $this->string не распознается как фактическое строковое значение.

Вы можете запустить print_r ( $this->string ), чтобы лучше понять, что он содержит.

См.: http://php.net/manual/en/language.types.array.php

Вы можете использовать функцию is_string(..), чтобы выяснить, является ли $this->string действительным, и, возможно, проверить с помощью array_key_exists (), действителен ли ваш поиск.

person Ryan    schedule 29.01.2013