plist simpleXML, проблема с доступом к списку массивов

Допустим, у меня есть документ 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. Благодарю.

1

Решение

Так как 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];
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]