我必須包含如下所示,第一個數組對象數組:PHP多陣列差異
Array
(
[1] => stdClass Object
(
[matchID] => 1
[tm] => 2014-01-16 08:55:13
[playertm] => 2014-01-16 08:55:14
)
[2] => stdClass Object
(
[matchID] => 2
[tm] => 2014-01-16 09:53:50
[playertm] => 2014-01-16 09:53:52
)
[3] => stdClass Object
(
[matchID] => 3
[tm] => 2014-01-16 09:58:49
[playertm] => 2014-01-16 09:58:57
)
[4] => stdClass Object
(
[matchID] => 4
[tm] => 2014-01-17 08:44:34
[playertm] => 2014-01-17 08:44:35
)
)
二陣:
Array
(
[3] => stdClass Object
(
[matchID] => 3
[tm] => 2014-01-16 09:58:49
[playertm] => 2014-01-16 09:58:57
)
[4] => stdClass Object
(
[matchID] => 4
[tm] => 2014-01-17 08:44:34
[playertm] => 2014-01-17 08:44:38
)
[5] => stdClass Object
(
[matchID] => 5
[tm] => 2014-01-19 08:44:34
[playertm] => 2014-01-19 08:44:38
)
)
,我試圖根據時代每個陣列同步。我想返回4個結果:
- 第一陣列中有一個比第二陣列更近
- 第二陣列中有一個時間的對象更近的比第一陣列 的對象
- 第一陣列在具有「playertm」比第二陣列更近的對象
- 第二陣列在具有「playertm」比所述第一陣列
一些結果毫安更近的對象y不在每個數組中,並且需要返回,但數組鍵總是匹配。
我使用的「array_udiff」功能和迄今有以下幾點:
function tmCompare($a, $b)
{
return strtotime($a->tm) - strtotime($b->tm);
}
function ptmCompare($a, $b)
{
return strtotime($a->playertm) - strtotime($b->playertm);
}
$df1 = array_udiff($a, $b, 'tmCompare');
$df2 = array_udiff($b, $a, 'tmCompare');
$df3 = array_udiff($a, $b, 'ptmCompare');
$df4 = array_udiff($b, $a, 'ptmCompare');
出現返回的差異,但是陣列[4]中的每個的最後2個函數被返回,而餘隻有當時間較大而不僅僅是不同時,才希望它被返回。
我已經試過
return (strtotime($a->playertm) > strtotime($b->playertm)) ? -1 : 0;
和類似的,但似乎無法得到正確的結果。我在這裏錯過了一些簡單的東西,還是想着這個錯誤?
編輯:這裏是一個快速引擎收錄獲得運行http://pastebin.com/gRz9v2kz
感謝任何幫助的代碼。
我們可以假設數組是通過時間在你的榜樣排序?例如。第二個數組中最近的時間將是最後一個元素的時間。 – kba
因此,爲了幫助他人,每個陣列的預期結果是什麼? –
[tm]可以總是按舊到舊排序,但[playertm]可能不是。預期的結果應該是 1 [1] [2] 2. [5] 3. [1] [2] 4 [4] [5] 如果數組是在1.它不該與3.和4一樣。 希望我已經解釋得很好。相同的結果將被忽略,並且每個結果只返回最近的結果。 – Thomas