この多次元配列をツリーの形で持っています。
$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
たが、役に立ちませんでした。
誰かがこれに対する答えを持っていれば、それは大歓迎です。
ありがとう。