Сравнение одномерного массива int с многомерным массивом объектов

Прежде чем я начну, я хочу извиниться за, возможно, легкую для вас проблему, поскольку я в этом новичок. Итак, перейдем сразу к делу.

У меня огромный многомерный массив (это дерево категорий, и каждая категория имеет внутри еще одну категорию, еще одну и еще одну и т. д.). Весь этот массив фактически содержит объекты (каждый ключ является экземпляром объекта категории), поэтому у него есть все внутри (Id, parentId, дочерние элементы (массив) и т. д.).

У меня также есть второй массив, который представляет собой простой массив идентификаторов (одномерный массив, только с числами - идентификаторами категорий).

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

Для действительно простого примера (извините, это действительно сложно объяснить):

Древовидный массив:

  • 1
    • 5
      • 7
      • 11
        • 12
    • 6
  • 2
  • 3
  • 4
    • 8
      • 13
    • 9
    • 10

И в моем втором массиве ВСЕ маршрут до категории, которая мне нужна + другие маршруты, например:

[1] = 1,
[5] = 5,
[11] = 11,
[12] = 12,
[4] = 4,
[8] = 8

И мне нужно получить ТОЛЬКО последнюю категорию ветки, КОТОРАЯ ИМЕЕТ ВТОРОЙ МАССИВ, так что здесь результат должен быть 12 и 8, потому что они являются последними элементами в своих ветвях, если вы понимаете, что я имею в виду ... t должен быть листом.

Спасибо за любые идеи !!

// Обновлено: я действительно забыл показать то, что пытался, мне очень жаль, поехали:

    private function buildRows($products): array {
    $export = [ ]; // final array ($row)
    foreach ( $products as $product ) {
        $producer = $this->producers [$product->getProducerId ()];
        foreach ( $product->getSpecies () as $specie ) {
            $data = [ 
                    'id' => $product->getId (),
                    'url_vyrobce' => $producer->getUrl ()
            ];
            $tempUrl  = $producer->getUrl();
            foreach ( $this->csvRegions as $headCode ) {
                foreach ( $product->getRegions () as $region ) {
                    $data [$region->getRegionCode () . '_name'] = $region->getName ();
                }
            }

            $data ['catalog_no'] = $product->getCatalogNo ();
            $data ['catalog_no_suffix'] = $specie->getSuffix ();

            $productCategories = $product->getCategories(); 
            $leaf = [];
            $leaf[] = $this->findCategoryLeaves($product->getCategories(), $this->categoryTree);
            dump($leaf);
            foreach ( $productCategories as $catId ) {
                //$ids[] = $this->findCategoriesRoot($catId, $this->categoryTree);
                $category = $this->categoryDao->getCategory ( $catId );
                $parentId = $category->getParentCategoryId();
                //$this->categoryDao->loadParents ( $category ); // get parrents for this needle
                /*foreach($this->categoryTree as $key => $cat){
                    if ($cat['id'] === $parentId){
                        $parents[] = $key;
                    }
                    dump($parents[]);
                }*/
                /*      
                while ($parent = $category->getParentCategory()) {
                    if (in_array ( $parent->getId(), $productCategories )) {
                        array_push ( $parents, $parent->getId() );
                    }
                    if ($category->getParentCategory()) {
                        $category = $parent;
                    }
                }
                */
            }
            $row = [ ];
            foreach ( $this->createCsvHead () as $col ) {
                if (isset ( $data [$col] )) {
                    $row [] = $data [$col];
                } else {
                    $row [] = '';
                }
            }

            $export [] = $row; 
        }
    }
    return $export;
}

Здесь я просто делал некоторые приготовления для файла CSV, который в конечном итоге будет создан из данных. Я вызываю функцию

$this->FindCategoryLeaves($product->getCategories, $this->categoryTree)

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

private function findCategoryLeaves($productCategory, $categoryTree){
    dump($categoryTree);
    $leaves = [];
    $branches = [];
    dump($productCategory);
    $lastElement = end($productCategory);
    foreach($productCategory as $productCatId){
        foreach($categoryTree as $catTree){
            $catTreeId = $catTree->getId();
            if ($catTreeId === $productCatId){
                if ($productCatId === $lastElement){ 
                    $branches[] = $productCatId; 
                    dump($catTreeId . ' | LAST ID');
                    findCategoryLeaves($productCategory, $categoryTree); 
                }
                //}else{
                //  $leaves[] = $productCatId;
            }
            dump($catTreeId .' | ID NOT FOUND!');
            /*$subs = $catTree->getSubcategories();
            if (array_key_exists($productCategoryId, $subs)){
                dump($subs);
                $leaf[] = $productCategoryId;
                $this->findCategoryLeaves($productCategoryId, $subs);
            }else{
                dump($leaf);
                return $leaf;
            }*/
        }
        }
    }

Как 8 является последним элементом его ветки, когда у вас есть 13 с отступом под ним?

misorude 09.01.2019 11:36

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

misorude 09.01.2019 11:36

извлеките идентификаторы из многомерного массива с помощью array_column(), затем сравните

GabrieleMartini 09.01.2019 11:40

@misorude это не обязательно должен быть лист целой ветви дерева. Например, когда у вас есть категория футболок, и в ней есть подкатегория других вариантов, которые не являются обязательными. По сути, для меня «воображаемый лист» - это последний известный мне идентификатор.

Jan Kocvik 09.01.2019 12:56

@misorude plus Мне очень жаль, что я забыл показать свой код. Мои наилучшие извинения за это. Я отредактировал вопрос

Jan Kocvik 09.01.2019 13:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
50
0

Другие вопросы по теме