Ссылка на положение динамического ассоциативного массива - PullRequest
0 голосов
/ 01 марта 2011

Я запрашиваю данные из онлайн-источника, который затем декодирую в объекты json StdClass (используя php).Как только я это сделаю, у меня будет следующее (см. Ниже).Я пытаюсь извлечь элементы из 'otherstuff', выполнив echo $response->stuff->WHAT GOES HERE?->otherstuff

Однако я не могу жестко закодировать [2010-12], потому что это дата, есть ли способ, которым я могу позвонить, например $response->stuff->nextsibling->stuff

Надеюсь, это кому-то имеет смысл: D В настоящее время я убираю это с помощью цикла $key => $value для извлечения значения ключа и использую его в моем вызове $response->stuff->$key->stuff.

stdClass Object
(
    [commentary] => 
    [stuff] => stdClass Object
        (
            **[2010-12]** => stdClass Object
                (
                    [otherstuff] => stdClass Object
                        (
                            [otherstuffrate] => 1
                            [otherstufflevel] => 1
                            [otherstufftotal] => 1
                        )    
                )

        )

) 

Ответы [ 3 ]

3 голосов
/ 01 марта 2011

Экземпляры StdClass могут использоваться с некоторыми функциями массива , среди них

Так что вы можете сделать ( кодовая панель )

$obj = new StdClass;
$obj->{"2012-10"} = 'foo';
echo current($obj); // foo
echo key($obj); // 2012-10

В sidenote свойства объекта не должны начинаться с цифры, и они могут не содержать тире, поэтому вместо работы с объектами StdClass передайте TRUE в качестве второго аргумента json_decode.Возвращенные объекты будут преобразованы в ассоциативные массивы.

0 голосов
/ 01 марта 2011

Снова отредактировано: объектный код также добавлен

json, декодируйте его как ассоциативный массив и используйте ключ, полученный через array_keys.Посмотрите, как это работает здесь: http://codepad.org/X8HCubIO

    <?php

$str = '{
       "commentary" : null,
        "stuff" : {
            "ANYDATE" : {
                "otherstuff": {
                    "otherstuffrate" : 1,
                    "otherstufflevel" : 1,
                    "otherstufftotal" : 1
                }
            }
        }
      }';

$obj = json_decode($str,true);
$reqKey = array_keys($obj["stuff"]);
$req = $obj["stuff"][$reqKey[0]]["otherstuff"];
print_r($req);
print "====================as object ============\n";
$obj = json_decode($str);
$req = current($obj->stuff)->otherstuff; 
print_r($req);
?>
0 голосов
/ 01 марта 2011

Ключ даты должен быть строкой, в противном случае PHP прерывается;).

echo $response->stuff['2010-12']->otherstuff

Получите его, используя строку.

...