Это не самое элегантное решение, но что-то вроде этого должно помочь:
<?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