看到下面的代码,当多个记录中的状态、编号和日期相同时,我想将记录组合起来,并将不同的版本号组合成一个元素,在一个组合的数组元素中,希望下面的例子能更好地解释我想要的。
我很难想出一个干净高效的方法来做到这一点。有人能帮我吗?我无法找出与这个问题类似的问题。
假设我有一个数组:
array (size=4)
995 =>
array (size=4)
'status' => string 'accept' (length=6)
'number' => string '130106' (length=6)
'date' => string 'July 11th, 2013' (length=15)
'version_number' => 1
996 =>
array (size=4)
'status' => string 'won' (length=3)
'number' => string '130106' (length=6)
'date' => string 'July 11th, 2013' (length=15)
'version_number' => null
993 =>
array (size=4)
'status' => string 'won' (length=3)
'number' => string '130106' (length=6)
'date' => string 'July 11th, 2013' (length=15)
'version_number' => null
992 =>
array (size=4)
'status' => string 'accept' (length=6)
'number' => string '130106' (length=6)
'date' => string 'July 11th, 2013' (length=15)
'version_number' => 3
期望结果:
array (size=3)
0 =>
array (size=4)
'status' => string 'accept' (length=6)
'number' => string '130106' (length=6)
'date' => string 'July 11th, 2013' (length=15)
'version_number' => array (1, 3)
1 =>
array (size=4)
'status' => string 'won' (length=3)
'number' => string '130106' (length=6)
'date' => string 'July 11th, 2013' (length=15)
'version_number' => null
2 =>
array (size=4)
'status' => string 'won' (length=3)
'number' => string '130106' (length=6)
'date' => string 'July 11th, 2013' (length=15)
'version_number' => null
我认为您可以使用以下函数:http://www.php.net/manual/en/function.array-intersect-assoc.php
循环遍历数组并检查数组的每个索引的交集。如果状态、编号和日期都有交集,则组合版本并分配回要检查的索引,然后弹出与之进行比较的索引。完成对所有其他索引的检查后,将当前索引放入新的数组中。
我将为您列出一些伪代码,因为我现在没有服务器可以访问来进行测试,只需循环遍历您的数组元素,比较应该如下所示:
array_intersect_assoc($array[995],$array[996]); -> intersect = number, date
array_intersect_assoc($array[995],$array[993]); -> intersect = number, date
array_intersect_assoc($array[995],$array[992]); -> intersect = status, number, date OK
array_push($array[995]['version'], $array[992]['version']);
unset($array[992]);
end of loop,
array_push($new_array, $array[995]);
$new_array: 0 =>
'status' => string 'accept'
'number' => string '130106'
'date' => string 'July 11th, 2013'
'version_number' => array (1, 3)
#now loop moves on to the rest of the remaining elements.
因此,它将通过循环将所有版本累积到一个索引中,进一步删除数组中的所有冗余数据(这样我们就不会再循环了),然后在完整迭代时,将索引保存到一个新数组中。