您好,我正在尝试计算关联数组中重复值的数量,如下所示:
array(3) { [0]=> array(3) { ["Title"]=> string(25) "hello"
["Price"]=> int(50)
["Count"]=> int(1) }
[1]=> array(3) { ["Title"]=> string(35) "world"
["Price"]=> int(50)
["Count"]=> int(1) }
[2]=> array(3) { ["Title"]=> string(25) "hello"
["Price"]=> int(50)
["Count"]=> int(1) } }
正如您在这里看到的,“标题”标签中有一个重复的值,我想对它们进行计数并向“计数”部分添加一个。我开始做这样的事情:
$prodArray = array();
// Add the values to the array if it's the first time it occurs.
if (!in_array($row['prodTitle'], $prodArray["Title"]))
{
array_push($prodArray,
array( Title => $row['prodTitle'],
Price => $row['prodPrice'],
Count => 1)
);
}
else
{
//Add one to the count for the current item.
}
问题是我无法通过 in_array 函数访问数组中的“Title”元素。欢迎任何建议。
如果您想检测正在创建的数组中的重复项,类似这样的操作可以避免多次遍历数组:
$arr=array();
while($row = mysql_fetch_array($result)) {
$arr[$row['prodTitle']] = isset($arr[$row['prodTitle']])
? $arr[$row['prodTitle']] +1
: 0;
}
$dups = array_keys(array_filter($arr)); //any key => 0 will be filtred out
如果你想直接通过 SQL 获取重复数据,请看一下:
您当前的查询——
SELECT prodTitle
FROM product
WHERE prodTitle != '{$keyword}'
AND creditCard IN( SELECT creditCard FROM product WHERE prodTitle ='{$keyword}');
给出这样的数据
prod cc
A 1
A 2
A 3
A 1
A 1
B 15
B 1
B 2
B 21
C 10
C 1
返回此集合(带有 $keyword=='A'):
prod
B
B
C
返回的聚合查询only在非 X 上使用的信用卡在 X 上也使用过至少两次的记录 --
SELECT p1.prodTitle, COUNT(p2.creditCard) AS numrecords
FROM product p1
JOIN product p2
ON (p1.creditCard = p2.creditCard)
WHERE p1.prodTitle != '{$keyword}'
AND p2.prodTitle = '{$keyword}'
GROUP BY p1.prodTitle
HAVING COUNT(p2.creditCard) > 1;
给定相同的数据,返回这个集合:
prod num
B 2
进行聚合查询可以避免所有与循环有关的混乱。这是一个link http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html到 MySQL 聚合函数列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)