цикл через массив - создать новый массив из этого - PullRequest
0 голосов
/ 05 октября 2019

у меня есть этот массив, например:

$array = [
  'foodTypes' => [
    'pizza' => '120',
    'burger' => [
      'calorie' => '50',
      'sugar' => '10'
      'prices' => [
        'regular' => '150',
        'discount' => '10'
      ]
    ]
  ]
];

я хочу создать цикл через этот массив и создать новый массив из него (по пути я проверю значение каждого ключа и внесу измененияесли мне понадобится в некоторых случаях новый массив).

  • важно: массив неизвестных уровней.

1 Ответ

0 голосов
/ 06 октября 2019

Я написал отдельный класс для этого, который вы можете использовать, например, из "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

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