【问题标题】:Comparing 2 arrays of objects php and return matching比较2个对象数组php并返回匹配
【发布时间】:2018-08-25 10:54:23
【问题描述】:

我正在尝试比较两个包含多个动态对象的数组。顺序可以不断变化。目标是只获取匹配的对象。

我已经尝试过array_intersect($array1,$array2) 的功能,但它不起作用。我还没有找到合适的数组函数或任何其他可以使用的解决方案。

我拥有的数据示例

$array1 = '[
        {
            "id": "0",
            "name": "Salary - Daily",
            "charge_type": "2",
            "charge": "20",
            "settlement_channel": "Bank AN Other [1]",
            "account_name": "Jane Doe",
            "account_number": "12345678",
            "id_number": "12345678",
            "phone_number": "12345678",
            "added_by": "John Doe",
            "payment_status": "Payment processed successfully"
        },
        {
            "id": "1",
            "name": "XYZ",
            "charge_type": "10",
            "charge": "30",
            "settlement_channel": "BK Europe [2]",
            "account_name": "Jean Dee",
            "account_number": "6789567845",
            "id_number": "6789567845",
            "phone_number": "6789567845",
            "added_by": "John Doe",
            "payment_status": "Payment processed successfully"
        }
    ]';

$array2 = '[
        {
            "id": "0",
            "name": "Salary - Daily",
            "charge_type": "2",
            "charge": "20",
            "settlement_channel": "Bank AN Other [1]",
            "account_name": "Jane Doe",
            "account_number": "12345678",
            "id_number": "12345678",
            "phone_number": "12345678",
            "added_by": "John Doe",
            "payment_status": "Payment processed successfully"
        },
        {
            "id": "1",
            "name": "NHIF - Daily",
            "charge_type": "2",
            "charge": "30",
            "settlement_channel": "Airtel Money [2]",
            "account_name": "Nicgcgvg",
            "account_number": "98765432345678",
            "id_number": "456787654",
            "phone_number": "09876543",
            "added_by": "Nickson",
            "payment_status": "Payment processed successfully"
        },
        {
            "id": "2",
            "name": "Salary - Daily",
            "charge_type": "2",
            "charge": "50",
            "settlement_channel": "Equitel [4]",
            "account_name": "Nyakambi",
            "account_number": "09876543",
            "id_number": "1234567890",
            "phone_number": "234567890",
            "added_by": "Tom",
            "payment_status": "Payment processed successfully"
        },
        {
            "id": "3",
            "name": "Contribution - Daily",
            "charge_type": "2",
            "charge": "30",
            "settlement_channel": "T-Kash [3]",
            "account_name": "Web App Sol",
            "account_number": "234567890",
            "id_number": "456345678",
            "phone_number": "024567056",
            "added_by": "Tom",
            "payment_status": "Payment processed successfully"
        },
        {
            "id": "4",
            "name": "Staff Commision",
            "charge_type": "2",
            "charge": "50",
            "settlement_channel": "UBA Bank [559900]",
            "account_name": "Nick",
            "account_number": "0006652",
            "id_number": "CPR/00000/2018",
            "phone_number": "568609",
            "added_by": "Tom",
            "payment_status": "Payment processed successfully"
        }
    ]';

预期输出

$matching_objects = '[
            {
                "id": "0",
                "name": "Salary - Daily",
                "charge_type": "2",
                "charge": "20",
                "settlement_channel": "Bank AN Other [1]",
                "account_name": "Jane Doe",
                "account_number": "12345678",
                "id_number": "12345678",
                "phone_number": "12345678",
                "added_by": "John Doe",
                "payment_status": "Payment processed successfully"
            }]';

从匹配中可以看出,我只想在比较两个json数组/字符串后得到匹配的对象。

【问题讨论】:

  • 从提供的代码中可以看出,$array1$array2 不是Arrays,它们只是JSON 格式的Strings。
  • array_intersect($array1,$array2) 在此之前您需要像 $newArray = json_decode($array1,TRUE) 一样解码 json 并尝试
  • @prasannaputtaswamy 你错了。

标签: php arrays json multidimensional-array


【解决方案1】:

试试这个。 这对你有用。

$array1 = json_decode($array1);
$array2 = json_decode($array2);

$matching_objects = [];

foreach ($array1 as $key1 => $value1) {
    foreach ($array2 as $key2 => $value2) {
        if($value1 == $value2){
            $matching_objects[] = $value2;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2015-12-29
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多