我有一个混合数组类型,类似于:
Array
(
[0] => 368
[1] => Array
(
[0] => 384
[1] => 383
)
)
我试图将唯一计数获取为count(array_unique($arr_val))
,但其抛出错误:Array to string conversion
我想把嵌套作为一种类型。例如,如果另一个相同的数组[384383]出现在另一个不应添加到总计数的索引上,因为这不是唯一的数组。在这种情况下,唯一计数应大于1。
使用SORT_REGULAR
作为第二个参数。
$array = ['test', 'test', [10,20,30], [10, 20, 30], [20, 30], 'test_one', 'test_two'];
print_r(array_unique($array, SORT_REGULAR));
结果:
array:5 [
0 => "test"
2 => array:3 [
0 => 10
1 => 20
2 => 30
]
4 => array:2 [
0 => 20
1 => 30
]
5 => "test_one"
6 => "test_two"
]
计算唯一顶级数组元素的原始算法:
- 散列数组顶级元素
- 生成临时唯一哈希数组
- 计数临时数组
例如:
$arr = [368, [0 => 384, 1 => 383],[0 => 384, 1 => 383]];
$hashedUniqueArr = [];
foreach ($arr as $val) {
$hash = md5(serialize($val));
if (!in_array($hash, $hashedUniqueArr)) {
$hashedUniqueArr[] = $hash;
}
}
echo 'unique top level elements: ' . count($hashedUniqueArr);