从多维数组中选择唯一数组,日期除外



>我有一个这样的多维数组

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
        )
)

所以我正在使用这个函数从多维数组中选择唯一的数组 ( 参考: http://phpdevblog.niknovo.com/2009/01/using-array-unique-with-multidimensional-arrays.html ) 这个链接也有答案,为什么我不使用 php 函数 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参数添加到函数中并传递它。

相关内容

  • 没有找到相关文章

最新更新