Select 来自多维数组的唯一数组,日期除外
Select unique arrays from multidimensional array with exception of date
我有一个这样的多维数组
Array
(
[0] => Array
(
[name] => test
[c1] => flower
[c2] => fruit
[date] => 2017-10-05 10:44:05
)
[1] => Array
(
[name] => test
[c1] => flower
[c2] => fruit
[date] => 2017-10-06 10:44:08
)
[2] => Array
(
[name] => test1
[c1] => chicken
[c2] => fruit
[date] => 2017-10-07 10:44:10
)
[3] => Array
(
[name] => test2
[c1] => flower
[c2] => cow
[date] => 2017-10-08 10:44:15
)
)
所以我使用这个函数来 select 来自多维数组的唯一数组(参考:http://phpdevblog.niknovo.com/2009/01/using-array-unique-with-multidimensional-arrays.html)这个 link 有我为什么不使用 [=21] 的答案=] 函数 array_unique() 以及。
function arrayUnique($array, $preserveKeys = true)
{
// Unique Array for return
$arrayRewrite = array();
// Array with the md5 hashes
$arrayHashes = array();
foreach($array as $key => $item) {
// Serialize the current element and create a md5 hash
$hash = md5(serialize($item));
// If the md5 didn't come up yet, add the element to
// to arrayRewrite, otherwise drop it
if (!isset($arrayHashes[$hash])) {
// Save the current element hash
$arrayHashes[$hash] = $hash;
// Add element to the unique Array
if ($preserveKeys) {
$arrayRewrite[$key] = $item;
} else {
$arrayRewrite[] = $item;
}
}
}
return $arrayRewrite;
}
但如果日期是数组的一部分,上述函数将失败,因为每个数组都有不同的日期,然后它认为每个数组都是唯一的。有没有办法避免在上述函数中使用日期,但在输出中仍然得到带有日期的唯一数组?
当然可以。我会使用像这样的函数:
function serializeWithout($array, $key = null) {
if (isset($key)) unset($array[$key]);
return serialize($array);
}
并将代码中的 serialize
调用替换为 serializeWithout($item,'date');
。或者您可以向您的函数添加一个 $key
参数并传递它。
我有一个这样的多维数组
Array
(
[0] => Array
(
[name] => test
[c1] => flower
[c2] => fruit
[date] => 2017-10-05 10:44:05
)
[1] => Array
(
[name] => test
[c1] => flower
[c2] => fruit
[date] => 2017-10-06 10:44:08
)
[2] => Array
(
[name] => test1
[c1] => chicken
[c2] => fruit
[date] => 2017-10-07 10:44:10
)
[3] => Array
(
[name] => test2
[c1] => flower
[c2] => cow
[date] => 2017-10-08 10:44:15
)
)
所以我使用这个函数来 select 来自多维数组的唯一数组(参考:http://phpdevblog.niknovo.com/2009/01/using-array-unique-with-multidimensional-arrays.html)这个 link 有我为什么不使用 [=21] 的答案=] 函数 array_unique() 以及。
function arrayUnique($array, $preserveKeys = true)
{
// Unique Array for return
$arrayRewrite = array();
// Array with the md5 hashes
$arrayHashes = array();
foreach($array as $key => $item) {
// Serialize the current element and create a md5 hash
$hash = md5(serialize($item));
// If the md5 didn't come up yet, add the element to
// to arrayRewrite, otherwise drop it
if (!isset($arrayHashes[$hash])) {
// Save the current element hash
$arrayHashes[$hash] = $hash;
// Add element to the unique Array
if ($preserveKeys) {
$arrayRewrite[$key] = $item;
} else {
$arrayRewrite[] = $item;
}
}
}
return $arrayRewrite;
}
但如果日期是数组的一部分,上述函数将失败,因为每个数组都有不同的日期,然后它认为每个数组都是唯一的。有没有办法避免在上述函数中使用日期,但在输出中仍然得到带有日期的唯一数组?
当然可以。我会使用像这样的函数:
function serializeWithout($array, $key = null) {
if (isset($key)) unset($array[$key]);
return serialize($array);
}
并将代码中的 serialize
调用替换为 serializeWithout($item,'date');
。或者您可以向您的函数添加一个 $key
参数并传递它。