0

我正在使用的编程语言:PHP

我有 30 个来自数据库的结果,可以是 ARRAY 或 OBJECT

我想要的是一种找到常见值的算法。

前任 :

$data[0] = array('effected_object_id'=>54,'data'=>array('some_data'));
$data[1] = array('effected_object_id'=>21,'data'=>array('some_data'));
$data[2] = array('effected_object_id'=>63,'data'=>array('some_data'));
$data[3] = array('effected_object_id'=>21,'data'=>array('some_data'));
$data[4] = array('effected_object_id'=>54,'data'=>array('some_data'));
$data[5] = array('effected_object_id'=>21,'data'=>array('some_data'));
...... 30 arrays

在上面的例子中,在 effect_object_id 列中我有几个共同的元素,比如 21(3)、54(2)

我想得到这些共同的元素。

抱歉,如果这已经在某个地方被问及并解决了,我只是用谷歌搜索并尝试了一下。但找不到快速解决方案,是的,我在这里不需要太多循环。

提前致谢。:)

4

2 回答 2

2
$groups = array();
foreach ($data as $row) {
    $groups[ $row['effected_object_id'] ][] = $row;
}
于 2012-05-21T19:52:29.593 回答
2

最简单的方法是将数组用作哈希表:

基本上,您可以创建一个格式为:

array[k] = v

其中 k 是 effected_object_id,v 是具有 Effective_object_id = k 的条目数组。

喜欢:

$vals = array(
    21 => array('data1', 'data2'),
);

喜欢:

$indexedData = array();
foreach ($data as $d) {
    $indexedData[$d['effected_object_id']][] = $d['data'];
}

然后要查找重复值,您可以循环并检查 count() > 1。

根据您的确切需求,您可能希望以不同的方式构建此方法,但希望这能传达基本思想。

值得注意的是,要找到重复项,这是 O(n)。实际上需要 <= 2n 次迭代才能找到重复项。 n需要迭代来索引条目,然后需要另一数量的迭代 <= n 来遍历索引数组并查找重复项。

于 2012-05-21T19:52:49.793 回答