我有两个数组,我喜欢循环遍历它们,并比较每个数组之间的日期。
$newArray = Array (
[0] => Array (
[id] => 1
[date] => 26-11-2013 9:30:56 PM
)
[1] => Array (
[id] => 2
[date] => 30-11-2013 11:20:12 AM
)
[2] => Array (
[id] => 3
[date] => 26-11-2013 9:30:56 PM
)
[3] => Array (
[id] => 4
[date] => 30-11-2013 11:20:12 AM
)
}
$oldArray = Array (
[0] => Array (
[id] => 1
[date] => 26-11-2013 9:30:56 PM
)
[1] => Array (
[id] => 2
[date] => 26-11-2013 9:30:56 PM
)
[2] => Array (
[id] => 3
[date] => 26-11-2013 9:30:56 PM
)
}
foreach ($newArray as $newPhoto) {
foreach ($oldArray as $oldPhoto) {
if (strtotime($newPhoto['date']) != strtotime($oldPhoto['date'])) {
// download new photo
}
}
}
我意识到把foreach
和foreach
放在一起不会减少它。循环遍历每个数组并比较日期的最佳方法是什么?
$newArray
具有最新照片,并与$oldArray
进行比较。如果时间戳不匹配或列表中有新照片,请下载新图像。
在这个例子中,我将下载第二个和第四个图像,而忽略其他图像。
我会这样做。它不对任何一个数组的索引进行任何假设,并且随着$oldArray
的大小增长,它仍然相当有效。
// index $oldArray by id for speed
$index = array();
foreach ($oldArray as $photo) {
$index[$photo['id']] = $photo['date'];
}
// iterate through new photos, checking if each one needs downloading
foreach ($newArray as $photo) {
if (!isset($index[$photo['id']]) // photo is not in $oldArray
|| strtotime($photo['date']) > strtotime($index[$photo['id']])) { // photo is in $oldArray, but a new version is available
// download new photo
}
}
foreach ($newArray as $key => $newPhoto) {
//If the key doesn't exist in $oldArray it is new
if(!isset($oldArray[$key])){
//download new photo
}
elseif (strtotime($newPhoto['date']) != strtotime($oldArray[$key]['date'])) { //timestamp mismatch
//download new photo
}
}
注意:我假设您的oldArray和newArray键控相同。I.e如果id 1在newArray的0
点中,我假设id 1在oldArray的0
点中。
为什么使用foreach,您可以简单地使用for:
for($i=0; $i<sizeof($newArray); $i++){
if(strtotime($newArray[$i]['date']) != strtotime($oldArray[$i]['date'])){
//new photo do sth
}else {
//old photo do sth or not :)
}
}