php 二維數組比較通過某字段

  • 場景,需要將兩個二維數組進行比較,找出其中相同的元素

  • 大體思路就是,先在兩個二維數組中找出相同主鍵相同的元素,再進行比較

  • 在php文檔中的方法一般都是針對一維數組,這裏我們只能手動去處理二維數組
    第一想法是循環去處理兩個數組,但是兩個數組循環起來有點不好寫

  • 這裏使用將二維數組中的標識字段降成一維數組,再對一維數進行處理

<?php
function array_compare($array_1,$array_2){

    $array_1 =[
        ['one'=>'aa','two'=>'bb'],
        ['one'=>'cc','two'=>'dd'],
        ['one'=>'rr','two'=>'fd'],
    ];
    $array_2 =[
        ['aa'=>'cc','bb'=>'dd'],
        ['aa'=>'we','bb'=>'ff'],
        ['aa'=>'rer','bb'=>'gdf'],
        ['aa'=>'aa','bb'=>'cc']
    ];

    $one_col = array_column($array_1,'one');
    $two_col = array_column($array_2,'aa');//根據標識字段獲取一維數組,用於進行交集比較

    $one_int = array_intersect($one_col,$two_col);
    $two_int = array_intersect($two_col,$one_col);//分別交集比較獲取原數組的key,和標識字段

    $two_index =[];

    foreach ($one_int as $one_item){
        array_push($two_index,array_search($one_item,$two_int));//根據標識字段,生成兩個對應原數組的key數組$one_index和$two_index
    }
    $one_index =array_keys($one_int);
    $true_array =[];
    for ($i=0;$i<count($one_index);$i++){//在原數組取數據進行比較
        $one_data = $array_1[$one_index[$i]];
        $two_data = $array_2[$two_index[$i]];
        $diff = array_diff($one_data,$two_data);//數組差集,返回空數組時表示兩數組相等,適用於兩數組元素數量一致。
        if (count($diff)<1){
            array_push($true_array,$one_data);
        }
    }

    return $true_array;
}

echo  json_encode(array_compare('1','2'));

在這裏插入圖片描述

通過將兩個二維數組的主鍵字段降成兩個一維數組(注意數組會重新生成自然連續key),交集獲取對應的key,通過key獲取數組進行比較

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章