有没有什么我可以缩短这段代码,使它更有效率。我已经有一段时间没有使用PHP了,有点生疏了。
到目前为止,我已经从Google FreeBusy API的外部JS文件中提取了一个数组,然后从WordPress数据库中提取了一个数组来比较两者。
如果数组中的{start-time}彼此不匹配,则从数据库中删除该项。
我必须创建两个新的数组,以便每个数组都具有相同的细节,并且我不会将google数组与从数据库中拉出数组时获得的不相关项进行比较。
我不确定使用多个foreach循环是不是正确的方法,如果任何PHP专家能给我一些关于如何提高效率的建议,我将不胜感激。
<?php
$apiArray = json_decode($myArray, true); //decode the json into a php array
$notCal = $wpdb->get_results("SELECT * FROM `wp_amelia_appointments` WHERE
`internalNotes` = 'freeBusy' AND `serviceId` = 4", ARRAY_A);
foreach ($notCal as $row) {
$databaseArray[] = $row['bookingStart'];
}
foreach ($apiArray as $rows) {
$formattedItem = $rows['start'];
$formattedItem = date('Y-m-d H:i:s', strtotime( "$formattedItem - 10 hours"));
$googleArray[] = $formattedItem;
}
$result = array_diff($databaseArray, $googleArray);
foreach ($result as $itemtoremove) {
$sql = $wpdb->delete('wp_amelia_appointments', array ('bookingStart' => $itemtoremove));
}
发布于 2018-08-23 09:24:55
我有几个建议:
也许可以简化$databaseArray
的获取。您可以先执行SELECT booking_start FROM
,然后使用$wpdb->get_col
(https://codex.wordpress.org/Class_Reference/wpdb#SELECT_a_Column),而不是SELECT * FROM
。
纯粹的风格,但您可以稍微简化一下第二个循环:
foreach ($apiArray as $rows) {
$googleArray[] = date('Y-m-d H:i:s', strtotime("{$rows['start']} - 10 hours"));
}
最后,如果您想减少数据库交互的数量,可以用一个带有WHERE booking_start IN
子句的delete语句替换最后一个循环。
https://stackoverflow.com/questions/51976716
复制相似问题