2

嗨,我正在尝试计算关联数组中重复值的数量,如下所示:

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 函数访问数组中的“标题”元素。欢迎任何建议。

4

2 回答 2

1

如果你想检测你正在创建的数组中的重复,这样的事情避免了多次遍历数组:

$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 直接获取 dups,请查看以下内容:

您当前的查询——

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

一个聚合查询,它只返回在非 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

进行聚合查询可以避免所有的循环问题。这是MySQL 聚合函数列表的 链接。

于 2012-08-15T11:02:50.283 回答
0

好的,所以我找到了我的解决方案,我让它看起来像这样可能不是他最有效的方式,但它有效:

$prodArray = array();
$ar = array();


$query ="THE QUERY";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result))
{
array_push($ar, $row['prodTitle']);
}

function findDuplicates($data,$dupval) {
$nb= 0;
foreach($data as $key => $val)
if ($val==$dupval) $nb++;
return $nb;
}


$uniarr = array_unique($ar);

//Will run the function findDuplicates for each unique title in the array
for ($i = 0; $i < sizeof($uniarr); $i++)
{
$count = findDuplicates($ar, $uniarr[$i]);
array_push($prodArray, array( Title => $uniarr[$i], Count => $count));
}

//Displays 2 of the results in the array
for ($c = 0; $c < 2; $c++)
{
echo "The title:".$prodArray[$c]["Title"]." And the amount:".$prodArray[$c]["Count"];
echo "<br />";
}

因此,您可以随意发表您对此的评论,如果您有任何改进,请随时发表。

于 2012-08-14T17:06:57.873 回答