PHP先搜索,比较两组数组,相同部分和不同部分组成新数组。

现在有一组数组A和另外一个数组data。
第一部就是先从数组data里找到对应的数组A,
需要四个键值对相同,就是id,name,info1,info2。
然后找到之后比较,如果ext1不为空用A数组。如果为空,则用对应的data数组的数据,并且把data数组的ext2键的value改成1,其他不变。
组成一个新数组newdata。

$arrA = [
    [
        'id' => '1',
        'name' => '3',
        'info1' => '1',
        'info2' => 'a',
        'ext1' => '1',
        'ext2' => 'a',
        'ext3' => '1',
    ],


 $arrData = array (  
    '0' => [
        'id' => '1',
        'name' => '3',
        'info1' => '1',
        'info2' => 'a',
        'ext1' => '1',
        'ext2' => 'a',
        'ext3' => '1',
    ],  
    '1' => [
        'id' => '2',
        'name' => '3',
        'info1' => '1',
        'info2' => 'a',
        'ext1' => '1',
        'ext2' => 'a',
        'ext3' => '1',
    ],
        ],  
    '2' => [
        'id' => '3',
        'name' => '2',
        'info1' => '1',
        'info2' => 'a',
        'ext1' => '1',
        'ext2' => 'a',
        'ext3' => '1',
    ],
); 
阅读 1.5k
1 个回答

大概实现

<?php
$arrA = [
    [
        'id'    => '1',
        'name'  => '3',
        'info1' => '2',
        'info2' => 'a',
        'ext1'  => '1',
        'ext2'  => 'a',
        'ext3'  => '1',
    ],
    [
        'id'    => '1',
        'name'  => '3',
        'info1' => '1',
        'info2' => 'a',
        'ext1'  => '1',
        'ext2'  => 'a',
        'ext3'  => '1',
    ],
    [
        'id'    => '2',
        'name'  => '3',
        'info1' => '1',
        'info2' => 'a',
        'ext1'  => '',
        'ext2'  => 'a',
        'ext3'  => '1',
    ],
];
$arrData = [
    [
        'id'    => '1',
        'name'  => '3',
        'info1' => '1',
        'info2' => 'a',
        'ext1'  => '1',
        'ext2'  => 'a',
        'ext3'  => '1',
    ],
    [
        'id'    => '2',
        'name'  => '3',
        'info1' => '1',
        'info2' => 'a',
        'ext1'  => '1',
        'ext2'  => 'a',
        'ext3'  => '1',
    ],

    [
        'id'    => '3',
        'name'  => '2',
        'info1' => '1',
        'info2' => 'a',
        'ext1'  => '1',
        'ext2'  => 'a',
        'ext3'  => '1',
    ],
];
function diffTmp($arrA, $arrData)
{
    $result = [];
    $arrA = array_values($arrA);
    $arrData = array_values($arrData);
    $firstTmp = array_map('createTmp', $arrA);
    $lastTmp = array_map('createTmp', $arrData);
    foreach ($firstTmp as $fk => $ft) {
        foreach ($lastTmp as $lk => $lt) {
            if ($ft === $lt) {
                if (empty($arrA[$fk]['ext1'])) {
                    $arrData[$lk]['ext2'] = 1;
                    array_push($result, $arrData[$lk]);
                    continue;
                }
                array_push($result, $arrA[$fk]);
            }
        }
    }

    return $result;
}

function createTmp($array)
{
    $tmp = [
        'id'    => $array['id'],
        'name'  => $array['name'],
        'info1' => $array['info1'],
        'info2' => $array['info2'],
    ];
    ksort($tmp);
    return json_encode($tmp);
}

$result = diffTmp($arrA, $arrData);
var_dump($result);
推荐问题