Как получить значение от объекта в php - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно получить значение [text] из всех этих объектов - классов.

Я могу получить значения из массивов Но из этого объекта класса в массиве я не могу получить значения [text].

Любая помощь будет принята с благодарностью.

Array
(
 [0] => stdClass Object
 (
    [text] => time
    [tr] => Array
    (
        [0] => stdClass Object
        (
            [text] => while
            [syn] => Array
            (
                [0] => stdClass Object
                (
                    [text] => when
                )
            )
        )
        [1] => stdClass Object
        (
            [text] => occasion  
            [syn] => Array
            (
                [0] => stdClass Object
                (
                    [text] => moment
                )
                [1] => stdClass Object
                    (
                        [text] => day   
                    )
                    [2] => stdClass Object
                        (
                            [text] => date  
                        )
                )
            )
        )
    )
)

1 Ответ

0 голосов
/ 29 мая 2020

Это не самое элегантное решение, но что-то вроде этого должно помочь:

<?php
$data = [
    [
        'text' => 'time',
        'tr' => [
            'text' => 'while',
            'syn' => [
                'text' => 'when'
            ],
            [
                'text' => 'occasion',
                'syn' => [
                    [
                        'text' => 'moment'
                    ],
                    [
                        'text' => 'day'
                    ],
                    [
                        'text' => 'date'
                    ]
                ]
            ]
        ]
    ]
];

$data = json_decode(json_encode($data));

function recurseProperties($object) {
    $text = [];
    foreach ($object as $property => $value) {
        if ($property === 'text') {
            echo $property . '  =>  ' . $value . "\n";
            $text[] = $value;
        } else {
            $text = array_merge($text, recurseProperties($value));
        }
    }
    return $text;
}

function extractText($data) {
    $text = [];
    foreach ($data as $object) {
        $text = array_merge($text, recurseProperties($object));
    }

    return $text;
}

var_dump(extractText($data));

В качестве альтернативы, если вам удобно работать с массивами и это источник json, вы можете просто сделать:

  json_decode($jsonString, true)

Что преобразует его в ассоциативный массив, см .: https://www.php.net/manual/en/function.json-decode.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...