Я написал отдельный класс для этого, который вы можете использовать, например, из "app / Classes / NestedArray.php"
<?php
// namespace App\Classes; // DON'T FORGET TO WRITE HERE THE CORRECT NAMESPACE FOR YOU
class NestedArray
{
protected $result = [];
protected function doSomethingWith($item) {
// you can do something with $item which is not an array (string, int, or something else)
// for example, here we will collect all values which great than 10
if((int)$item > 10) {
$this->result[] = (int)$item;
}
}
protected function deepDiveIntoNextLevel(array $array) {
foreach ($array as $item) {
if(is_array($item)) {
return $this->deepDiveIntoNextLevel($item);
} else {
$this->doSomethingWith($item);
}
}
}
public function loop(array $initial_array)
{
$this->deepDiveIntoNextLevel($initial_array);
return $this->result;
}
}
В этом примере я сделал что-то с элементами, которые не являютсямассив (предполагается строка или целое число). Таким образом, для использования этого класса в любом месте вашего приложения вы можете просто создать экземпляр и вызвать его внутри функции loop (). Например:
// use App\Classes\NestedArray; // ALSO DON'T FORGET TO USE APPROPRIATE CLASS
$array = [
'foodTypes' => [
'pizza' => '120',
'burger' => [
'calorie' => '50',
'sugar' => '10',
'prices' => [
'regular' => '150',
'discount' => '10'
]
]
]
];
$nestedArray = new NestedArray();
var_dump($nestedArray->loop($array));
В этом примере я собрал все числа (числовые строки или целые числа) в один массив, значение которого превышает 10