在 Laravel 中找出 json 的差异
Finding differences in json in Laravel
我是 Laravel 的初学者。
我在 Laravel 8,
申请
我在数据库中有这个值:
$json = {
"old": {
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to": "adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:07:41.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 3,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
},
"attributes": {
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to":
"adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:09:08.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 4,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3,2]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5,6,4]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
}
}
我需要显示与 OLD 和 Attributes 的不同之处。
我怎样才能做到?
请帮帮我。
如何通过json_decode
将其转换为数组,然后使用array_diff
呢?
像这样:
$json = json_decode('{"old": {"id": 1, "hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681", "car_id": 2, "comments": "uwagi", "driver_id": 1, "address_to": "adres dostawy", "carrier_id": 22, "company_id": 1, "created_at": "2022-04-14T09:07:41.000000Z", "data_start": "2022-04-01", "deleted_at": null, "updated_at": "2022-04-14T09:07:41.000000Z", "carrier_nip": "728-597-9477", "data_finish": "2022-04-04", "address_from": "adres wyjazdu", "carrier_city": "Lake Emersonville", "carrier_name": "Satterfield, Lebsack and OConner", "order_number": "Numer zlecenia", "speed_number": "Numer zlecenia speed - spedycja", "carrier_email": "mattie50@gmail.com", "carrier_phone": "347.731.2768 x1508", "dispatcher_id": 3, "carrier_street": "6342 Pollich Crossroad", "selected_files": "[7,8,9]", "transport_type": 2, "deliver_comments": null, "transport_status": 3, "is_neutral_option": 2, "selected_products": "[1,3]", "transport_content": "kontakt", "delivery_signature": null, "selected_documents": "[5]", "carrier_postal_code": "36804-7962", "hidden_carrier_data": 0, "delivery_name_surname": null, "delivery_signature_binary": null, "disable_change_status_driver": 0}, "attributes": {"id": 1, "hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681", "car_id": 2, "comments": "uwagi", "driver_id": 1, "address_to": "adres dostawy", "carrier_id": 22, "company_id": 1, "created_at": "2022-04-14T09:07:41.000000Z", "data_start": "2022-04-01", "deleted_at": null, "updated_at": "2022-04-14T09:09:08.000000Z", "carrier_nip": "728-597-9477", "data_finish": "2022-04-04", "address_from": "adres wyjazdu", "carrier_city": "Lake Emersonville", "carrier_name": "Satterfield, Lebsack and OConner", "order_number": "Numer zlecenia", "speed_number": "Numer zlecenia speed - spedycja", "carrier_email": "mattie50@gmail.com", "carrier_phone": "347.731.2768 x1508", "dispatcher_id": 4, "carrier_street": "6342 Pollich Crossroad", "selected_files": "[7,8,9]", "transport_type": 2, "deliver_comments": null, "transport_status": 3, "is_neutral_option": 2, "selected_products": "[1,3,2]", "transport_content": "kontakt", "delivery_signature": null, "selected_documents": "[5,6,4]", "carrier_postal_code": "36804-7962", "hidden_carrier_data": 0, "delivery_name_surname": null, "delivery_signature_binary": null, "disable_change_status_driver": 0}}', true);
var_dump(array_diff($json['old'], $json['attributes']));
结果我得到:
array(2) {
["selected_products"]=>
string(5) "[1,3]"
["selected_documents"]=>
string(3) "[5]"
}
您可以使用 array_diff
https://www.php.net/manual/en/function.array-diff.php
<?php
$json = '{
"old": {
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to": "adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:07:41.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O\'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 3,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
},
"attributes": {
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to":
"adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:09:08.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O\'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 4,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3,2]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5,6,4]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
}
}';
$array = \json_decode($json, true);
$diff = \array_diff($array['old'], $array['attributes']);
\var_dump($diff);
这将输出:
array(2) {
["selected_products"]=>
string(5) "[1,3]"
["selected_documents"]=>
string(3) "[5]"
}
在此处查看示例https://3v4l.org/A3ck7
我为你写了一个代码,它只 returns 数组中的差异。 array_diff()
似乎是一个不错的选择,但是 运行 我的脚本,它发现了比 array_diff()
方法更多的差异。
注意 我在 foreach
循环中严格比较,但我假设数据来自相同的 table,只是不同的记录,所以类型应该无关紧要。无论如何,如果你想要所有的差异,那么IMO严格比较是可行的方法。
$differences = [];
$json = '{"old": {"id": 1, "hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681", "car_id": 2, "comments": "uwagi", "driver_id": 1, "address_to": "adres dostawy", "carrier_id": 22, "company_id": 1, "created_at": "2022-04-14T09:07:41.000000Z", "data_start": "2022-04-01", "deleted_at": null, "updated_at": "2022-04-14T09:07:41.000000Z", "carrier_nip": "728-597-9477", "data_finish": "2022-04-04", "address_from": "adres wyjazdu", "carrier_city": "Lake Emersonville", "carrier_name": "Satterfield, Lebsack and O\'Conner", "order_number": "Numer zlecenia", "speed_number": "Numer zlecenia speed - spedycja", "carrier_email": "mattie50@gmail.com", "carrier_phone": "347.731.2768 x1508", "dispatcher_id": 3, "carrier_street": "6342 Pollich Crossroad", "selected_files": "[7,8,9]", "transport_type": 2, "deliver_comments": null, "transport_status": 3, "is_neutral_option": 2, "selected_products": "[1,3]", "transport_content": "kontakt", "delivery_signature": null, "selected_documents": "[5]", "carrier_postal_code": "36804-7962", "hidden_carrier_data": 0, "delivery_name_surname": null, "delivery_signature_binary": null, "disable_change_status_driver": 0}, "attributes": {"id": 1, "hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681", "car_id": 2, "comments": "uwagi", "driver_id": 1, "address_to": "adres dostawy", "carrier_id": 22, "company_id": 1, "created_at": "2022-04-14T09:07:41.000000Z", "data_start": "2022-04-01", "deleted_at": null, "updated_at": "2022-04-14T09:09:08.000000Z", "carrier_nip": "728-597-9477", "data_finish": "2022-04-04", "address_from": "adres wyjazdu", "carrier_city": "Lake Emersonville", "carrier_name": "Satterfield, Lebsack and O\'Conner", "order_number": "Numer zlecenia", "speed_number": "Numer zlecenia speed - spedycja", "carrier_email": "mattie50@gmail.com", "carrier_phone": "347.731.2768 x1508", "dispatcher_id": 4, "carrier_street": "6342 Pollich Crossroad", "selected_files": "[7,8,9]", "transport_type": 2, "deliver_comments": null, "transport_status": 3, "is_neutral_option": 2, "selected_products": "[1,3,2]", "transport_content": "kontakt", "delivery_signature": null, "selected_documents": "[5,6,4]", "carrier_postal_code": "36804-7962", "hidden_carrier_data": 0, "delivery_name_surname": null, "delivery_signature_binary": null, "disable_change_status_driver": 0}}';
$jsonArray = json_decode($json, true);
// Assuming that $jsonArray["old"] and $jsonArray["attributes"] have the same elements
foreach ($jsonArray["old"] as $key => $value) {
if ($value !== $jsonArray["attributes"][$key])
$differences[$key] = [
"old" => $value,
"attributes" => $jsonArray["attributes"][$key]
];
}
我得到的结果:
Array
(
[updated_at] => Array
(
[old] => 2022-04-14T09:07:41.000000Z
[attributes] => 2022-04-14T09:09:08.000000Z
)
[dispatcher_id] => Array
(
[old] => 3
[attributes] => 4
)
[selected_products] => Array
(
[old] => [1,3]
[attributes] => [1,3,2]
)
[selected_documents] => Array
(
[old] => [5]
[attributes] => [5,6,4]
)
)
首先,你必须将两个对象分成两个子对象
1是旧的,2是属性
喜欢:
$old = '{
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to": "adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:07:41.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O\'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 3,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
}';
$attribute = '{
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to":
"adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:09:08.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O\'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 4,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3,2]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5,6,4]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
}';
之后:
$old_array = json_decode($old, TRUE);
$attribute_array = json_decode($attribute, TRUE);
$result_array = array_diff($old_array,$attribute_array);
if(!empty($result_array[0])){
echo "They are different";
}
它将像使用旧数组和属性数组时一样工作
旧数组有 ABC 键而属性数组没有然后它会显示消息
我们正在使用 json_decode,它将用于将 JSON 转换为关联数组,您必须将 true 作为第二个属性传递才能使其关联
也许会有帮助
我是 Laravel 的初学者。 我在 Laravel 8,
申请我在数据库中有这个值:
$json = {
"old": {
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to": "adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:07:41.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 3,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
},
"attributes": {
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to":
"adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:09:08.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 4,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3,2]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5,6,4]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
}
}
我需要显示与 OLD 和 Attributes 的不同之处。 我怎样才能做到?
请帮帮我。
如何通过json_decode
将其转换为数组,然后使用array_diff
呢?
像这样:
$json = json_decode('{"old": {"id": 1, "hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681", "car_id": 2, "comments": "uwagi", "driver_id": 1, "address_to": "adres dostawy", "carrier_id": 22, "company_id": 1, "created_at": "2022-04-14T09:07:41.000000Z", "data_start": "2022-04-01", "deleted_at": null, "updated_at": "2022-04-14T09:07:41.000000Z", "carrier_nip": "728-597-9477", "data_finish": "2022-04-04", "address_from": "adres wyjazdu", "carrier_city": "Lake Emersonville", "carrier_name": "Satterfield, Lebsack and OConner", "order_number": "Numer zlecenia", "speed_number": "Numer zlecenia speed - spedycja", "carrier_email": "mattie50@gmail.com", "carrier_phone": "347.731.2768 x1508", "dispatcher_id": 3, "carrier_street": "6342 Pollich Crossroad", "selected_files": "[7,8,9]", "transport_type": 2, "deliver_comments": null, "transport_status": 3, "is_neutral_option": 2, "selected_products": "[1,3]", "transport_content": "kontakt", "delivery_signature": null, "selected_documents": "[5]", "carrier_postal_code": "36804-7962", "hidden_carrier_data": 0, "delivery_name_surname": null, "delivery_signature_binary": null, "disable_change_status_driver": 0}, "attributes": {"id": 1, "hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681", "car_id": 2, "comments": "uwagi", "driver_id": 1, "address_to": "adres dostawy", "carrier_id": 22, "company_id": 1, "created_at": "2022-04-14T09:07:41.000000Z", "data_start": "2022-04-01", "deleted_at": null, "updated_at": "2022-04-14T09:09:08.000000Z", "carrier_nip": "728-597-9477", "data_finish": "2022-04-04", "address_from": "adres wyjazdu", "carrier_city": "Lake Emersonville", "carrier_name": "Satterfield, Lebsack and OConner", "order_number": "Numer zlecenia", "speed_number": "Numer zlecenia speed - spedycja", "carrier_email": "mattie50@gmail.com", "carrier_phone": "347.731.2768 x1508", "dispatcher_id": 4, "carrier_street": "6342 Pollich Crossroad", "selected_files": "[7,8,9]", "transport_type": 2, "deliver_comments": null, "transport_status": 3, "is_neutral_option": 2, "selected_products": "[1,3,2]", "transport_content": "kontakt", "delivery_signature": null, "selected_documents": "[5,6,4]", "carrier_postal_code": "36804-7962", "hidden_carrier_data": 0, "delivery_name_surname": null, "delivery_signature_binary": null, "disable_change_status_driver": 0}}', true);
var_dump(array_diff($json['old'], $json['attributes']));
结果我得到:
array(2) {
["selected_products"]=>
string(5) "[1,3]"
["selected_documents"]=>
string(3) "[5]"
}
您可以使用 array_diff
https://www.php.net/manual/en/function.array-diff.php
<?php
$json = '{
"old": {
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to": "adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:07:41.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O\'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 3,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
},
"attributes": {
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to":
"adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:09:08.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O\'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 4,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3,2]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5,6,4]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
}
}';
$array = \json_decode($json, true);
$diff = \array_diff($array['old'], $array['attributes']);
\var_dump($diff);
这将输出:
array(2) {
["selected_products"]=>
string(5) "[1,3]"
["selected_documents"]=>
string(3) "[5]"
}
在此处查看示例https://3v4l.org/A3ck7
我为你写了一个代码,它只 returns 数组中的差异。 array_diff()
似乎是一个不错的选择,但是 运行 我的脚本,它发现了比 array_diff()
方法更多的差异。
注意 我在 foreach
循环中严格比较,但我假设数据来自相同的 table,只是不同的记录,所以类型应该无关紧要。无论如何,如果你想要所有的差异,那么IMO严格比较是可行的方法。
$differences = [];
$json = '{"old": {"id": 1, "hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681", "car_id": 2, "comments": "uwagi", "driver_id": 1, "address_to": "adres dostawy", "carrier_id": 22, "company_id": 1, "created_at": "2022-04-14T09:07:41.000000Z", "data_start": "2022-04-01", "deleted_at": null, "updated_at": "2022-04-14T09:07:41.000000Z", "carrier_nip": "728-597-9477", "data_finish": "2022-04-04", "address_from": "adres wyjazdu", "carrier_city": "Lake Emersonville", "carrier_name": "Satterfield, Lebsack and O\'Conner", "order_number": "Numer zlecenia", "speed_number": "Numer zlecenia speed - spedycja", "carrier_email": "mattie50@gmail.com", "carrier_phone": "347.731.2768 x1508", "dispatcher_id": 3, "carrier_street": "6342 Pollich Crossroad", "selected_files": "[7,8,9]", "transport_type": 2, "deliver_comments": null, "transport_status": 3, "is_neutral_option": 2, "selected_products": "[1,3]", "transport_content": "kontakt", "delivery_signature": null, "selected_documents": "[5]", "carrier_postal_code": "36804-7962", "hidden_carrier_data": 0, "delivery_name_surname": null, "delivery_signature_binary": null, "disable_change_status_driver": 0}, "attributes": {"id": 1, "hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681", "car_id": 2, "comments": "uwagi", "driver_id": 1, "address_to": "adres dostawy", "carrier_id": 22, "company_id": 1, "created_at": "2022-04-14T09:07:41.000000Z", "data_start": "2022-04-01", "deleted_at": null, "updated_at": "2022-04-14T09:09:08.000000Z", "carrier_nip": "728-597-9477", "data_finish": "2022-04-04", "address_from": "adres wyjazdu", "carrier_city": "Lake Emersonville", "carrier_name": "Satterfield, Lebsack and O\'Conner", "order_number": "Numer zlecenia", "speed_number": "Numer zlecenia speed - spedycja", "carrier_email": "mattie50@gmail.com", "carrier_phone": "347.731.2768 x1508", "dispatcher_id": 4, "carrier_street": "6342 Pollich Crossroad", "selected_files": "[7,8,9]", "transport_type": 2, "deliver_comments": null, "transport_status": 3, "is_neutral_option": 2, "selected_products": "[1,3,2]", "transport_content": "kontakt", "delivery_signature": null, "selected_documents": "[5,6,4]", "carrier_postal_code": "36804-7962", "hidden_carrier_data": 0, "delivery_name_surname": null, "delivery_signature_binary": null, "disable_change_status_driver": 0}}';
$jsonArray = json_decode($json, true);
// Assuming that $jsonArray["old"] and $jsonArray["attributes"] have the same elements
foreach ($jsonArray["old"] as $key => $value) {
if ($value !== $jsonArray["attributes"][$key])
$differences[$key] = [
"old" => $value,
"attributes" => $jsonArray["attributes"][$key]
];
}
我得到的结果:
Array
(
[updated_at] => Array
(
[old] => 2022-04-14T09:07:41.000000Z
[attributes] => 2022-04-14T09:09:08.000000Z
)
[dispatcher_id] => Array
(
[old] => 3
[attributes] => 4
)
[selected_products] => Array
(
[old] => [1,3]
[attributes] => [1,3,2]
)
[selected_documents] => Array
(
[old] => [5]
[attributes] => [5,6,4]
)
)
首先,你必须将两个对象分成两个子对象 1是旧的,2是属性
喜欢:
$old = '{
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to": "adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:07:41.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O\'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 3,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
}';
$attribute = '{
"id": 1,
"hash": "19f149b6-f7e2-4d61-b3c5-d46ebc92f681",
"car_id": 2,
"comments": "uwagi",
"driver_id": 1,
"address_to":
"adres dostawy",
"carrier_id": 22,
"company_id": 1,
"created_at": "2022-04-14T09:07:41.000000Z",
"data_start": "2022-04-01",
"deleted_at": null,
"updated_at": "2022-04-14T09:09:08.000000Z",
"carrier_nip": "728-597-9477",
"data_finish": "2022-04-04",
"address_from": "adres wyjazdu",
"carrier_city": "Lake Emersonville",
"carrier_name": "Satterfield, Lebsack and O\'Conner",
"order_number": "Numer zlecenia",
"speed_number": "Numer zlecenia speed - spedycja",
"carrier_email": "mattie50@gmail.com",
"carrier_phone": "347.731.2768 x1508",
"dispatcher_id": 4,
"carrier_street": "6342 Pollich Crossroad",
"selected_files": "[7,8,9]",
"transport_type": 2,
"deliver_comments": null,
"transport_status": 3,
"is_neutral_option": 2,
"selected_products": "[1,3,2]",
"transport_content": "kontakt",
"delivery_signature": null,
"selected_documents": "[5,6,4]",
"carrier_postal_code": "36804-7962",
"hidden_carrier_data": 0,
"delivery_name_surname": null,
"delivery_signature_binary": null,
"disable_change_status_driver": 0
}';
之后:
$old_array = json_decode($old, TRUE);
$attribute_array = json_decode($attribute, TRUE);
$result_array = array_diff($old_array,$attribute_array);
if(!empty($result_array[0])){
echo "They are different";
}
它将像使用旧数组和属性数组时一样工作
旧数组有 ABC 键而属性数组没有然后它会显示消息
我们正在使用 json_decode,它将用于将 JSON 转换为关联数组,您必须将 true 作为第二个属性传递才能使其关联
也许会有帮助