1

この多次元配列をツリーの形で持っています。

$menu = [
    'records' => [
        [
            'id' => 1,
            'parent_id' => null,
            'name' => 'Food',
            'type' => 'category',
            'records' => [
                [
                    'id' => 2,
                    'parent_id' => 1,
                    'name' => 'Breakfast',
                    'type' => 'category',
                    'records' => [
                        [
                            'id' => 3,
                            'parent_id' => 2,
                            'name' => 'Omelette',
                            'type' => 'category',
                            'records' => [
                                [
                                    'id' => 4,
                                    'parent_id' => 3,
                                    'name' => 'Turkish',
                                    'type' => 'item'
                                ],
                                [
                                    'id' => 5,
                                    'parent_id' => 3,
                                    'name' => 'Indian',
                                    'type' => 'item'
                                ],
                                [
                                    'id' => 6,
                                    'parent_id' => 1,
                                    'name' => 'American',
                                    'type' => 'item'
                                ]
                            ],
                            'statistics' => [
                                'sale_qty' => 0,
                                'gross_sale' => 0,
                                'net_sale' => 0,
                                'comp_qty' => 0,
                                'comp_total' => 0
                            ]
                        ],
                        [
                            'id' => 7,
                            'parent_id' => 1,
                            'name' => 'Bread',
                            'type' => 'item'
                        ]
                    ],
                    'statistics' => [
                        'sale_qty' => 0,
                        'gross_sale' => 0,
                        'net_sale' => 0,
                        'comp_qty' => 0,
                        'comp_total' => 0
                    ]
                ],
                [
                    'id' => 8,
                    'parent_id' => 1,
                    'name' => 'Jam',
                    'type' => 'item'
                ]
            ],
            'statistics' => [
                'sale_qty' => 0,
                'gross_sale' => 0,
                'net_sale' => 0,
                'comp_total' => 0
            ]
        ]
    ],
    'statistics' => [
        'sale_qty' => 0,
        'gross_sale' => 0,
        'net_sale' => 0,
        'comp_qty' => 0,
        'comp_total' => 0
    ]
];

次に、この別のログの配列があります

 $log = [
    'ids' => [5, 8],
    5 => [
        'id' => 5,
        'parent_id' => 3,
        'name' => 'Indian',
        'type' => 'item',
        'item_price' => '475.00',
        'item_tax' => '76.000000',
        'sale_count' => '1',
        'gross_total' => 551,
        'complimentry_count' => '0',
        'complimentry_total' => 0,
        'complimentry_net_total' => 0,
        'net_total' => 475
    ],
    8 => [
        'id' => 8,
        'parent_id' => 1,
        'name' => 'Jam',
        'type' => 'item',
        'item_price' => '603.45',
        'item_tax' => '"96.55',
        'sale_count' => '1',
        'gross_total' => 700,
        'complimentry_count' => '0',
        'complimentry_total' => 0,
        'complimentry_net_total' => 0,
        'net_total' => 603.45
    ]
];

ここでやろうとしているのは、「id」キーを照合$log['ids']して、配列内の値を検索することです。$menu値が にある場合は、$menuにある適切な配列に置き換え$logます。

たとえば、$menu見つかった場合に値 5 を見つけ、それを に置き換え$log[5]ます。

これが行われた後、不要でパスにない残りのノードが削除され、各リーフ (アイテム) の sales_count などの合計が、そのリーフの直接の親統計ノードの値と等しくなります。

最終的な配列は次のようになります

$finalmenu = [
    'records' => [
        [
            'id' => 1,
            'parent_id' => null,
            'name' => 'Food',
            'type' => 'category',
            'records' => [
                [
                    'id' => 2,
                    'parent_id' => 1,
                    'name' => 'Breakfast',
                    'type' => 'category',
                    'records' => [
                        [
                            'id' => 3,
                            'parent_id' => 2,
                            'name' => 'Omelette',
                            'type' => 'category',
                            'records' => [
                                [
                                    'id' => 5,
                                    'parent_id' => 3,
                                    'name' => 'Indian',
                                    'type' => 'item',
                                    'item_price' => '475.00',
                                    'item_tax' => '76.000000',
                                    'sale_count' => '1',
                                    'gross_total' => 551,
                                    'complimentry_count' => '0',
                                    'complimentry_total' => 0,
                                    'complimentry_net_total' => 0,
                                    'net_total' => 475
                                ]
                            ],
                            'statistics' => [
                                'sale_qty' => 1,
                                'gross_sale' => 551,
                                'net_sale' => 475,
                                'comp_qty' => 0,
                                'comp_total' => 0
                            ]
                        ],
                    ],
                    'statistics' => [
                        'sale_qty' => 1,
                        'gross_sale' => 551,
                        'net_sale' => 475,
                        'comp_qty' => 0,
                        'comp_total' => 0
                    ]
                ],
                [
                    'id' => 8,
                    'parent_id' => 1,
                    'name' => 'Jam',
                    'type' => 'item',
                    'item_price' => '603.45',
                    'item_tax' => '96.55',
                    'sale_count' => '1',
                    'gross_total' => 700,
                    'complimentry_count' => '0',
                    'complimentry_total' => 0,
                    'complimentry_net_total' => 0,
                    'net_total' => 603.45
                ]
            ],
            'statistics' => [
                'sale_qty' => 2,
                'gross_sale' => 1251,
                'net_sale' => 1078.45,
                'comp_total' => 0
            ]
        ]
    ],
    'statistics' => [
        'sale_qty' => 2,
        'gross_sale' => 1251,
        'net_sale' => 1078.45,
        'comp_total' => 0
    ]
];

私はこれを約1週間やり遂げようとしてきましたが、交換部品にたどり着くことができず、その後はできませんでした. で試しRecursiveIteratorIteratorましRecursiveArrayIteratorたが、役に立ちませんでした。

誰かがこれに対する答えを持っていれば、それは大歓迎です。

ありがとう。

4

0 に答える 0