Допустим, у меня есть документ plist simplexml, который выглядит следующим образом:
<dict>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
Я могу получить доступ к строке, например, так:
$obj->dict->string[0]
Это вернет мне 6.0. Однако, если я хочу получить доступ к первой строке во втором массиве:
$obj->dict->array[1]->string[0]
PHP выдает ошибку и не любит мою ссылку на массив. Какой правильный синтаксис здесь? Не так много примеров на документах apple plist simplexml. Благодарю.
Так как array
это Ключевое слово PHP, это будет синтаксическая ошибка, чтобы попытаться использовать ее в этом контексте. Вместо этого вам нужно обернуть это как строка в кавычках внутри {}
эффективно превращая его в динамическое имя свойства.
// Using the {"string"} dynamic property syntax:
echo $obj->dict->{'array'}[1]->string[0]
// Prints UIInterfaceOrientationPortrait
Это неоднозначно задокументировано в PHP переменные переменные и синтаксис свойств переменных ссылка.
Вы можете использовать его, чаще, чем избегать ключевых слов, для динамического конструирования свойств в виде строк. Это удобно, но не так хорошо известно.
// More often used to build properties or method names as strings...
///...Not that you need to do this...
$v1 = "arr";
$v2 = "ay";
echo $obj->dict->{$v1 . $v2}[1]->string[0];
Других решений пока нет …