Php 多维数组-获取唯一值,但计算所有重复项
我有一个多维数组,我想从中获取唯一的子值,但也有这些唯一子值出现的次数计数 例如,这将是我的起始数组:Php 多维数组-获取唯一值,但计算所有重复项,php,arrays,multidimensional-array,count,numbers,Php,Arrays,Multidimensional Array,Count,Numbers,我有一个多维数组,我想从中获取唯一的子值,但也有这些唯一子值出现的次数计数 例如,这将是我的起始数组: [0] => Array ( [0] => Array ( [id] => 1533438473619168 ) [1] => Array (
[0] => Array
(
[0] => Array
(
[id] => 1533438473619168
)
[1] => Array
(
[id] => 3333333333333333
)
)
[1] => Array
(
[0] => Array
(
[id] => 1533438473619168
)
[1] => Array
(
[id] => 5555555555555555
)
)
[2] => Array
(
[0] => Array
(
[id] => 1533438473619168
)
[1] => Array
(
[id] => 77777777777777777
)
)
最后,我想要一个如下所示的数组:
[0] => Array
(
[0] => Array
(
[id] => 1533438473619168
[count] => 3
)
[1] => Array
(
[id] => 3333333333333333
[count] => 1
)
[2] => Array
(
[id] => 5555555555555555
[count] => 1
)
[3] => Array
(
[id] => 77777777777777777
[count] => 1
)
)
有没有一种通用/简单的方法可以做到这一点,而无需迭代每个值的第一个数组,比较/存储临时数组中的值,检查它们,并将其添加到计数中?要获得精确的格式,您可能需要迭代当前数组并手动进行计数,但是php有数组\u count\u value()和array_unique()函数来实现这类功能:
要获得这种精确的格式,您可能需要迭代当前数组并手动进行计数,但是php有array\u count\u values()和array\u unique()函数用于此类操作:
因为您只关心数组中最深的值,所以使用
数组\u walk\u recursive
似乎适合这种情况。请注意,回调中使用了对输出数组$counted
的引用
array_walk_recursive($ids, function($id, $k) use (&$counted) {
$counted[$id] = isset($counted[$id]) ? $counted[$id] + 1 : 1;
});
使用id作为$counted
数组中的键将简化计数。这样做的结果将与您建议的输出有所不同,但在我看来,它实际上更易于使用。(例如,foreach($id=>$count){…
)
因为您只关心数组的最深值,所以使用
array\u walk\u recursive
似乎适用于此。请注意,回调中使用了对输出数组$counted
的引用
array_walk_recursive($ids, function($id, $k) use (&$counted) {
$counted[$id] = isset($counted[$id]) ? $counted[$id] + 1 : 1;
});
使用id作为$counted
数组中的键将简化计数。其结果将与建议的输出有所不同,但我认为它实际上更易于使用。(例如foreach($id=>$count){…
)
不,没有比这更简单的方法了。使用id作为新数组的键以避免比较/检查。然后,您可以使用
array\u值将其删除。对于初学者,我会将所有数组合并在一起,然后您只需在一个数组中循环。感谢您的所有帮助。最后,我只是手动完成了此操作(正如我所料,这并不难,但比我所希望的更麻烦)。不,没有比这更简单的方法了。使用id作为新数组的键以避免比较/检查。然后,您可以使用array\u value
将其删除。对于初学者,我会将所有数组合并在一起,然后您只需在一个数组中循环。感谢您的所有帮助。最后,我只是手动完成了此操作(正如我所料,这并不难,但比我所希望的更麻烦)。谢谢,我将尝试此方法,看看它是否比我当前的解决方案更高效,但两者似乎都使用临时数组存储和相同的代码行。谢谢,我将尝试此方法,看看它是否比我当前的解决方案更高效,但两者似乎都使用临时数组存储和相同的代码行。