我是拉勒维尔的初学者。我在Laravel 8公司申请,
我在DB中有这个值:
$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
}
}我需要显示出与过去和属性不同的地方。我怎么能做到呢?
请帮帮我。
发布于 2022-04-14 09:37:42
我为您编写了一个代码,它只返回数组中的差异。array_diff()似乎是一个很好的替代方案,但是运行我的脚本,它发现了比array_diff()方法更多的差异。
注意到,我严格地在foreach循环中进行比较,但是我假设数据来自同一个表,只是不同的记录,所以类型不重要。不管怎么说,如果你想要有所有的差异,那么海事组织严格比较是可行的。
$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]
)
)发布于 2022-04-14 09:26:15
如何通过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]"
}发布于 2022-04-14 09:34:42
您可以使用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
https://stackoverflow.com/questions/71869190
复制相似问题