首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组操作将条目从1添加/移除到另一项

数组操作将条目从1添加/移除到另一项
EN

Stack Overflow用户
提问于 2017-04-28 03:50:24
回答 2查看 31关注 0票数 0

我有两组数组:

数据:

代码语言:javascript
运行
复制
$data = [
    [
        'company_code' => 'ABC',
        'supplier_codes' => [
            'S-2',
            'S-3',
            'S-5',
        ],
    ],
];

资料来源(来自数据库):

代码语言:javascript
运行
复制
$database = [
    'company_code' => 'ABC',
    'suppliers' => [
        [
            'code' => 'S-1',
        ],
        [
            'code' => 'S-2',
            'reference' => '12345'
        ],
        [
            'code' => 'S-3',
        ],
        [
            'code' => 'S-4',
            'reference' => 'some string',
        ]
    ],
];

我需要做到的是:

  • 如果供应商代码在$data中缺失,但在$database中存在,则从$database中删除它。
  • 如果供应商代码存在于$data中,但在$database中缺失,则将其添加到$database

这里示例的输出应该如下:

代码语言:javascript
运行
复制
$output = [
    'company_code' => 'ABC',
    'suppliers' => [
        [
            'code' => 'S-2',
            'reference' => '12345'
        ],
        [
            'code' => 'S-3',
        ],
        [
            'code' => 'S-5',
        ]
    ],
];

我正在考虑删除suppliers子数组,然后根据来自supplier_codes的数据重构结构。但问题是,suppliers中的一些条目可能有一个可选字段,名为reference

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-28 06:07:56

我以这样的方式解决我的问题:

代码语言:javascript
运行
复制
$result = $database;
$result['suppliers'] = [];

foreach($data as $tag) {
    foreach($tag['supplier_codes'] as $code) {
        $found = false;
        foreach($database['suppliers'] as $supplier) {
            if($supplier['code'] === $code) {
                $result['suppliers'][] = $supplier;
                $found = true;
            }
        }

        if(!$found) {
            $result['suppliers'][] = ['code' => $code];
        }
    }
}

print_r($result);输出

代码语言:javascript
运行
复制
Array
(
    [company_code] => ABC
    [suppliers] => Array
        (
            [0] => Array
                (
                    [code] => S-2
                    [reference] => 12345
                )

            [1] => Array
                (
                    [code] => S-3
                )

            [2] => Array
                (
                    [code] => S-5
                )
        )
)
票数 0
EN

Stack Overflow用户

发布于 2017-04-28 05:25:39

尝尝这个

代码语言:javascript
运行
复制
    <?php
$data = [
    [
        'company_code' => 'ABC',
        'supplier_codes' => ['S-2','S-3','S-5'],
    ],
];
$database = [
    'company_code' => 'ABC',
    'suppliers' => [
        [
            'code' => 'S-1',
        ],
        [
            'code' => 'S-2',
            'reference' => '12345'
        ],
        [
            'code' => 'S-3',
        ],
        [
            'code' => 'S-4',
            'reference' => 'some string',
        ]
    ],
];


foreach($database['suppliers'] as $k=>$v){
    foreach($data as $kd=>$vd){
        $valueremove = false;
        $removeIndex = '';
        foreach($vd['supplier_codes'] as $key=>$val){
            if($val == $v['code']){
                $valueremove = false;
                $removeIndex = '';
                break;
            } else {
                $valueremove = true;
                $removeIndex = $k;
            }
        }

        if($valueremove == true){
            unset($database['suppliers'][$removeIndex]);
        } else {
            $valueinsert = false;
            foreach($data as $kd=>$vd){
                foreach($vd['supplier_codes'] as $key=>$val){
                    foreach($database['suppliers'] as $kc=>$vc){
                        if($val == $vc['code']){
                            $valueinsert = false;
                            $insertIndex = '';
                            $insertVal = '';
                            break;
                        } else {
                            $valueinsert = true;
                            $insertIndex = count($database['suppliers'])+1;
                            $insertVal = $val;
                        }
                    }
                    if($valueinsert == true){
                        $database['suppliers'][$insertIndex] = array('code'=>$insertVal);
                    }
                }


            }

        }
    }
}
echo "<PRE>"; print_r($database);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43671668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档