PHP:在多维数组中查找和替换值

时间:2013-06-20 12:13:40

标签: php recursion multidimensional-array tree

我以树的形式拥有这个多维数组。

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

然后我有另一个日志数组

$log = array('ids'=>array(5,8),
               5=>array('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=>array('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'键在$ menu数组中搜索$ log ['ids']中的值。如果在$ menu中找到该值,则将其替换为$ log。中找到的相应数组。

例如,如果找到$ menu中的值5,则将其替换为$ log [5]。

完成此操作后,将删除不需要且不在路径中的其余节点,并且每个叶子(项目)的sale_count等的总和将等于其离开直接父统计信息节点的值

最终数组会像这样

$finalmenu = array('records'=>array(
                        array('id'=>1,
                              'parent_id'=>NULL,
                              'name'=>'Food',
                              'type'=>'category',
                              'records'=>array(
                                                  array('id'=>2,
                                                      'parent_id'=>1,
                                                      'name'=>'Breakfast',
                                                      'type'=>'category',
                                                      'records'=>array(
                                                                          array('id'=>3,
                                                                              'parent_id'=>2,
                                                                              'name'=>'Omelette',
                                                                              'type'=>'category',
                                                                              'records'=>array(
                                                                                            array('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'=>array('sale_qty'=>1,
                                                                                                  'gross_sale'=>551,
                                                                                                  'net_sale'=>475,
                                                                                                  'comp_qty'=>0,
                                                                                                  'comp_total'=>0)
                                                                        ),
                                                                  ),
                                                      'statistics'=>array('sale_qty'=>1,
                                                                          'gross_sale'=>551,
                                                                          'net_sale'=>475,
                                                                          'comp_qty'=>0,
                                                                          'comp_total'=>0)
                                                      ),
                                                array('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'=>array('sale_qty'=>2,
                                                  'gross_sale'=>1251,
                                                  'net_sale'=>1078.45,
                                                  'comp_total'=>0)
                              )
                      ),
         'statistics'=>array('sale_qty'=>2,
                             'gross_sale'=>1251,
                             'net_sale'=>1078.45,
                             'comp_total'=>0)
        ); 

我一直试图让这件事完成一周左右,但我只能到达更换部件,但之后却没有。我用RecursiveArrayIterator尝试了RecursiveIteratorIterator,但没有用。

如果有人对此作出回答,我们将非常感激。

感谢。

0 个答案:

没有答案