1

我有一个这样的数组

Array
(
    [original_data] => Array
        (
            [0] => Array
                (
                    [reference_id] => 122
                    [id] => 121
                    [reference_name] => Dinesh
                )

            [1] => Array
                (
                    [reference_id] => 123
                    [id] => 120
                    [reference_name] => Dinesh Test
                )

        )

    [edited_data] => Array
        (
            [0] => Array
                (
                    [reference_id] => 123
                    [id] => 120
                    [reference_name] => Dinesh Test2
                )

        )

)

我想知道这个original_dataedited_data数组之间的区别。怎么做?我尝试使用array_diff. 但是,它不能正常工作。

4

4 回答 4

1

你可以得到差异=>

$result = ref_array_diff($requestedData['edited_data'], $requestedData['data']);

print_r($result);

function ref_array_diff($arraya, $arrayb) {
    foreach ($arraya as $keya => $valuea) {
        if (in_array($valuea, $arrayb)) {
            unset($arraya[$keya]);
        }
    }
    return $arraya;
}
于 2018-06-15T10:36:58.103 回答
0

如果您array_map同时使用原始数据和编辑数据来获取 original_data id 值和edited_data id 值的数组。然后,您可以毫无问题地使用 array_diff。使用在一个但不在另一个中的 id 的结果列表,您可以使用原始数组上的数组映射值索引键查找原始值。

我在这里假设您的 id 键是数据数组中每个值的唯一标识符。如果不是这种情况,您需要做一些嵌套循环来比较深度值

于 2018-06-15T09:54:31.903 回答
0

这应该有效。

<?php

// your data
$data = array (
    'original_data' => array
        ('0' => array
            (
                'reference_id' => 122,
                'id' => 121,
                'reference_name' => 'Balasuresh,'
            ),

         '1' => array
            (
                'reference_id' => 123,
                'id' => 120,
                'reference_name' => 'Balasuresh',
            ),
        ),

    'edited_data' => array
        ('0' => array
            (
               'reference_id' => 123,
               'id' => 120,
               'reference_name' => 'Balasuresh Test',
            ),
        )

) ;


// let's get our reference_ids
$originalData = array() ;
foreach($data['original_data'] as $entry) {
    $originalData[$entry['reference_id']] = $entry ;
}

// let's compare our edited data to our original data
$editedData = array() ;
foreach($data['edited_data'] as $editedEntry) {
    if (isset($originalData[$editedEntry['reference_id']])) {
        // for readability
        $compare = $originalData[$editedEntry['reference_id']] ;
        foreach($editedEntry as $key=>$value) { 
            if ($compare[$key] != $value) {         
                $editedData[$editedEntry['reference_id']][$key] = $value ; 
            }
        }
    }
}

$editedData现在包含您的差异

于 2018-06-15T10:08:02.143 回答
0

这些是多维关联数组,您可以像这样递归地执行 array_diff_assoc:您可以在此处查看此代码https://3v4l.org/ovaQB

function array_diff_assoc_recursive($array1, $array2)
{
    foreach($array1 as $key => $value)
    {
        if(is_array($value))
        {
            if(!isset($array2[$key]))
            {
                $difference[$key] = $value;
            }
            elseif(!is_array($array2[$key]))
            {
                $difference[$key] = $value;
            }
            else
            {
                $new_diff = array_diff_assoc_recursive($value, $array2[$key]);
                if($new_diff != FALSE)
                {
                    $difference[$key] = $new_diff;
                }
            }
        }
        elseif(!isset($array2[$key]) || $array2[$key] != $value)
        {
            $difference[$key] = $value;
        }
    }
    return !isset($difference) ? 0 : $difference;
}

$a=["original_data"=>[
                [
                    'reference_id' => 122,
                    'id' => 121,
                    'reference_name' => 'Balasuresh'
                ],[
                    'reference_id' => 123,
                    'id' => 120,
                    'reference_name' => 'Balasuresh'
                ]

        ],

    'edited_data' => [[
                    'reference_id' => 123,
                    'id' => 120,
                    'reference_name' => 'Balasuresh Test'
                ]]

];

print_r(array_diff_assoc_recursive($a['edited_data'], $a['original_data']));

输出:

Array
(
    [0] => Array
        (
            [reference_id] => 123
            [id] => 120
            [reference_name] => Balasuresh Test
        )

)
于 2018-06-15T10:19:12.270 回答