【发布时间】:2013-07-24 22:59:39
【问题描述】:
我已经阅读并尝试应用几乎所有的从嵌套数组中删除重复的值线程,我相信这个问题有点独特我正在尝试从(非常)大的多维数组中删除整个重复的分支。我想这更像是一个 remove duplicate arrays from an array 类型的问题?
我在Pastebin 上有一个转储可以查看。我正在尝试使用一种受保护的方法,我正在调用 superUnique 来消除欺骗,但它不起作用(如下所示)。我做错了什么?
/**
* @param $array
* @param bool $preserveKeys
* @param array $hashes
* @return array
*/
protected function superUnique($array, $preserveKeys = false, $hashes = array())
{
$uniqueArray = array();
foreach ($array AS $key => $value)
{
if (TRUE === is_array($value))
{
$hash = md5(serialize($value));
if (FALSE === isset($hashes[$hash]))
{
$hashes[$hash] = $hash;
$uniqueArray[$key] = $this->superUnique($value, $preserveKeys, $hashes);
} else {
// skip it i guess ?? should be a duplicate
}
} else {
if ($preserveKeys)
{
$uniqueArray[$key] = $value;
} else {
$uniqueArray[] = $value;
}
}
}
return $uniqueArray;
}
这是它运行的代码,以及数组中的重复性示例
$output = $this->superUnique($output, 1);
foreach ($output AS $num => $arr)
{
// turns a multidim array to an object recursively
$obj = $this->arrToObj($arr);
if (isset($obj->message->body))
{
echo "Arr#: {$num}\n";
echo "Time: {$obj->attributes->timestamp}\n";
echo "Body: {$obj->message->body}\n\n\n";
}
}
die;
这是我输出的一部分,它显示了基于 pastebin 数组的高度重复性。
Arr#: 172
Time: 2013-06-25T16:34:46-0700
Body: ok, so we decided on everything then?
Arr#: 173
Time: 2013-06-25T16:34:46-0700
Body: ok, so we decided on everything then?
Arr#: 174
Time: 2013-06-25T16:34:46-0700
Body: ok, so we decided on everything then?
Arr#: 175
Time: 2013-06-25T16:34:46-0700
Body: ok, so we decided on everything then?
Arr#: 176
Time: 2013-06-25T16:34:59-0700
Body: yes, see you tomorrow
Arr#: 177
Time: 2013-06-25T16:34:59-0700
Body: yes, see you tomorrow
Arr#: 178
Time: 2013-06-25T16:34:59-0700
Body: yes, see you tomorrow
Arr#: 179
Time: 2013-06-25T16:34:59-0700
Body: yes, see you tomorrow
Arr#: 180
Time: 2013-06-25T16:35:38-0700
Body: are you still onlne?
Arr#: 181
Time: 2013-06-25T16:36:10-0700
Body: hey bob
【问题讨论】:
-
为什么是
// skip it?删除它 -
@AgmLauncher 这不起作用,因为它不是重复的 values 而是重复的数组。序列化这些似乎不起作用,因为这是我所做的尝试之一。
-
@AgmLauncher 这是运行序列化映射后的输出,您可以在数组中看到大量重复 pastebin.com/N4hQCEcR 虽然它确实将这从 204 个成员减少到 152 个成员,但还有很多
标签: php oop multidimensional-array duplicate-removal