我已经阅读并尝试从那里的嵌套数组线程中应用几乎所有删除重复值,我相信这个问题有点独特,因为我试图从(非常)大的多维数组中删除整个重复分支。我想这更像是从数组类型的问题中删除重复数组?
我在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