简体   繁体   English

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

[英]Compare values of two multidimentional array and insert if not exits

I have two array $array1 and $array2 which I get dynamically and look like 我有两个数组$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
            )
    );

which i need to compare. 我需要比较。

if $array2['id'] is not in $array1["activity"] (ie"activity_id") add array ['activity_id'=>$array2['id'],'cnt'=>0] to $array1['activity'] . 如果$array2['id']不在$array1["activity"] (即“ activity_id”),则将数组['activity_id'=>$array2['id'],'cnt'=>0]$array1['activity']

My result must be like 我的结果一定是

$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
                            )
                    )
            )
    );

What i have tried is 我试过的是

$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() function is not working as I excepted or I am trying to do it in the wrong way. in_array()函数无法正常工作,或者我尝试以错误的方式进行操作。 Can someone helps me with this? 有人可以帮我吗?

Sorry,finally i get what i did wrong.May be someone get helped. 抱歉,最后我明白我做错了。可能有人得到帮助。

everything is ok just change the line 一切都很好,只是换行

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

into

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM