Object of class themes could not be converted to string
1. When executing array_diff in PHP 7.4 — when calculating the difference set of the array, an error is reported: Object of class theme version could not be converted to string. as shown in Figure 1
{
"message": "Object of class Modules\\ThemeStoreDb\\ThemeSetting\\ThemeVersion could not be converted to string",
"status_code": 500,
"debug": {
"line": 299,
"file": "E:\\wwwroot\\object\\Modules\\ThemeStoreDb\\Handlers\\ThemeHandler.php",
"class": "Symfony\\Component\\Debug\\Exception\\FatalThrowableError",
"trace": [
"#0 E:\\wwwroot\\object\\Modules\\ThemeStoreDb\\Handlers\\ThemeHandler.php(299): array_diff(Array, Array)",
]
}
}
2. The code is implemented as follows, and print the two arrays of comparisons respectively
print_r($versions);
print_r($executedMigrations);
exit;
$scheduledVersions = array_diff($versions, $executedMigrations);
Array
(
[0] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => 2023_07_07_10_custom_mobile_layout
)
[1] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.0.20
)
[2] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.0.21
)
[3] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.0.28
)
[4] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.1
)
[5] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.2
)
[6] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.3
)
[7] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.30
)
[8] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.65
)
[9] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.70
)
[10] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.80
)
)
Array
(
[0] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.0.20
)
[1] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.0.21
)
[2] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.0.28
)
[3] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.1
)
[4] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.2
)
[5] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.3
)
[6] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.30
)
)
3. Adjust to array_udiff — Use the callback function to compare data to calculate the difference set of the array. strCaseCMP — binary safe comparison string (case insensitive)
//$scheduledVersions = array_diff($versions, $executedMigrations);
$scheduledVersions = array_udiff($versions, $executedMigrations, function ($version, $executedMigration) {
return strcasecmp($version->version, $executedMigration->version);
});
4. The final result is as expected.
Array
(
[0] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.65
)
[1] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.70
)
[2] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => v2.1.80
)
[3] => Modules\ThemeStoreDb\ThemeSetting\ThemeVersion Object
(
[version] => 2023_07_07_10_custom_mobile_layout
)
)
