我必须包含如下所示,第一个数组对象数组: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