比较两个多维数组的值,如果不存在则插入


Compare values of two multidimentional array and insert if not exits

我有两个数组$array1$array2,它们是动态获得的,看起来像

$array1 = Array
    (
        [0] => Array
            (
                [hour] => 10
                [activity] => Array
                    (
                        [0] => Array
                            (
                                [activity_id] => 1
                                [cnt] => 2
                            )
                        [1] => Array
                            (
                                [activity_id] => 2
                                [cnt] => 1
                            )
                    )
            )
        [1] => Array
            (
                [hour] => 11
                [activity] => Array
                    (
                    )
            )
        [2] => Array
            (
                [hour] => 12
                [percentage] => 0
                [activity] => Array
                    (
                        [0] => Array
                            (
                                [activity_id] => 2
                                [cnt] => 5
                            )
                        [1] => Array
                            (
                                [activity_id] => 3
                                [cnt] => 2
                            )
                    )
            )
    );

$array2 = Array
    (
        [0] => Array
            (
                [id] => 1
                [name] => Phone Calls
                [readable] => 1
                [status] => active
            )
        [1] => Array
            (
                [id] => 2
                [name] => Meeting With Customer
                [readable] => 1
                [status] => active
            )
        [2] => Array
            (
                [id] => 3
                [name] => Others Works
                [readable] => 1
                [status] => active
            )
    );

我需要比较一下。

如果$array2['id']不在$array1["activity"]中(即"activity_id"),则将数组['activity_id'=>$array2['id'],'cnt'=>0]添加到$array1['activity']

我的结果一定像

$result = Array
    (
        [0] => Array
            (
                [hour] => 10
                [activity] => Array
                    (
                        [0] => Array
                            (
                                [activity_id] => 1
                                [cnt] => 2
                            )
                        [1] => Array
                            (
                                [activity_id] => 2
                                [cnt] => 1
                            )
                        [2] => Array
                            (
                                [activity_id] => 3
                                [cnt] => 0
                            )
                    )
            )
        [1] => Array
            (
                [hour] => 11
                [activity] => Array
                    (
                        [0] => Array
                            (
                                [activity_id] => 1
                                [cnt] => 0
                            )
                        [1] => Array
                            (
                                [activity_id] => 2
                                [cnt] => 0
                            )
                        [2] => Array
                            (
                                [activity_id] => 3
                                [cnt] => 0
                            )
                    )
            )
        [2] => Array
            (
                [hour] => 12
                [percentage] => 0
                [activity] => Array
                    (
                        [0] => Array
                            (
                                [activity_id] => 1
                                [cnt] => 0
                            )
                        [1] => Array
                            (
                                [activity_id] => 2
                                [cnt] => 5
                            )
                        [2] => Array
                            (
                                [activity_id] => 3
                                [cnt] => 2
                            )
                    )
            )
    );

我试过的是

$finalArray = array();
foreach($array1 as $arr1) {
    foreach($array2 as $arr2) {
        if(!in_array($arr2['id'], $arr1['activity'])) {
            $array = ['activity_id'=>$arr2['id'], 'cnt'=>0];   
        }
        array_push($arr1['activity'], $array);
        unset($array);
    }
    array_push($finalArray, $result);
}
print_r($finalArray);

in_array()函数无法正常工作,或者我试图以错误的方式执行它。有人能帮我吗?

对不起,我终于明白我做错了什么。可能有人得到帮助。

一切都好,只要换一下

if(!in_array($arr2['id'], $arr1['activity'])) {

进入

if(!in_array( $readActivity['id'], array_column($result['activity'],'activity_id'))){