count数组在混合数组上是唯一的



我有一个混合数组类型,类似于:

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"
]

计算唯一顶级数组元素的原始算法:

  1. 散列数组顶级元素
  2. 生成临时唯一哈希数组
  3. 计数临时数组

例如:

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

最新更新