#php #parsing
#php #синтаксический анализ
Вопрос:
Используя PHP, я должен проанализировать строку, приходящую в мой код в формате, подобном этому:
object(stdClass)(4) {
["Title"]=> string(5) "Fruit"
["Color"]=> string(6) "yellow"
["Name"]=> string(6) "banana"
["id"]=> int(3)
}
Я уверен, что есть простое решение, но, похоже, я не могу его найти… как получить цвет и имя?
Большое спасибо.
Комментарии:
1. Вы пробовали $obj->Title $obj-> Color
2. Было бы немного более проницательно, если бы вы опубликовали фрагмент кода, который вы используете для генерации этого вывода.
3. Подождите, что? Вам нужно » разобрать » строку? Или это фактическая объектная переменная?
Ответ №1:
Вы можете сделать: $obj->Title
и так далее.
Или вы можете превратить его в массив:
$array = get_object_vars($obj);
Комментарии:
1. Спасибо! $obj-> Title делает это за меня.
2. Объекты stdClass могут иметь переменные, недоступные для обозначения массива. Пример использования фасада БД laravel (с использованием psysh):
>>> $res = DB::select("show create table test")[0] >>> get_object_vars($res) [ "Table" => "test", "Create Table" => """ CREATE TABLE test (n ... ]
переменная «Создать таблицу» доступна только с помощьюget_object_vars($res)
Ответ №2:
Вы создаете объекты stdClass и методы доступа из них следующим образом:
$obj = new StdClass;
$obj->foo = "bar";
echo $obj->foo;
Я рекомендую подклассы stdClass или создать свой собственный универсальный класс, чтобы вы могли предоставлять свои собственные методы.
Превращение объекта stdClass в массив:
Вы можете сделать это с помощью следующего кода:
$array = get_object_vars($obj);
Взгляните на:
http://php.net/manual/en/language.oop5.magic.php
http://krisjordan.com/dynamic-properties-in-php-with-stdclass
Комментарии:
1. Спасибо за вашу помощь! Мне просто нужен $obj-> Title, но полезно знать другую информацию на будущее.
Ответ №3:
Пример объекта stdClass:
$obj = new stdClass();
$obj->foo = "bar";
По свойству (как упоминали другие)
echo $obj->foo; // -> "bar"
По значению переменной:
$my_foo = 'foo';
echo $obj->{$my_foo}; // -> "bar"
Ответ №4:
Я решил эту проблему путем преобразования stdClass object
в array
using json_encode
и json_decode
вот так:
$object_encoded = json_encode( $obj );
$object_decoded = json_decode( $object_encoded, true );
echo $object_decoded['Color'];
Примечание: передача true
параметра в json_decode
возвращает ассоциативный массив.
Ответ №5:
extract(get_object_vars($obj))
вернет $Title, $Color и т. Д