【问题标题】:Count elements with a the same name in an array in php在php中计算数组中具有相同名称的元素
【发布时间】:2019-09-02 22:13:35
【问题描述】:

所以我有这个数组:

我不知道是否清楚,但是这个数组中有很多同名的元素,我想计算这些元素并显示它,这就是我创建数组的方式:

 foreach ($rowa as $rowsa)
{
    $sql = "SELECT count(*) as NUMBER FROM BANDZENDINGEN WHERE FB_AFGESLOTEN = 'F' AND FB_AKTIEF = 'T' AND FI_AFVOERKANAAL = 1 AND FI_RAYONID = $rowsa  AND FI_VERRIJKINGID < 1;";
    $sfh = $dbh->prepare($sql);
    $sfh->execute();
    $row = $sfh->fetchAll(PDO::FETCH_COLUMN, 0);

    array_push($row, $rows['FC_RAYON']);
    print_r($row);

}

我已经试过了:

count of duplicate elements in an array in php

这个anwser似乎对我不起作用,但也许我做错了什么。

btw $rows['FC_RAYON'] 来自另一个查询,与此问题无关,但如果您想查看它,我将编辑我的帖子以显示它。

那我必须这样做吗?你能帮忙吗?

编辑

更好地查看数组:

 Array ( [0] => 2 [1] => RT-SCB-PB01 ) 
 Array ( [0] => 0 [1] => RT-SCB-PB01 ) 
 Array ( [0] => 3 [1] => RT-SCB-PB01 ) 
 Array ( [0] => 1 [1] => ASDC-PBSN ) 
 Array ( [0] => 0 [1] => ASDC-PBSN ) 
 Array ( [0] => 0 [1] => ASDC-PBSN ) 
 Array ( [0] => 0 [1] => ASDC-PBSN ) 
 Array ( [0] => 1 [1] => ASDW-PBSN ) 

这是数组的一小部分。

编辑 2

 Array
(
  [0] => 2
  [1] => RT-SCB-PB01
)

 Array
(
  [0] => 2
  [1] => RT-SCB-PB01
)

Array
(
  [0] => 1
  [1] => RT-SCB-PB01
)

Array
(
  [0] => 3
  [1] => RT-SCB-PB01
)

Array
(
  [0] => 2
  [1] => ASDC-PBSN
)

Array
(
  [0] => 2
  [1] => ASDC-PBSN
)

Array
(
  [0] => 1
  [1] => ASDC-PBSN
)

Array
(
  [0] => 1
  [1] => ASDW-PBSN
)

Array
(
  [0] => 0
  [1] => ASDW-PBSN
)

Array
(
  [0] => 0
  [1] => ASDW-PBSN
)

所以这是一个更好的数组视图,数组中的数据是不同的,因为它是一个非常活跃的数据库

编辑 3

如果你有兴趣,这是我的全部结果,你可以在这里看到:

https://mega.nz/#!uvpBWSoL!V6xYCuJ5mCWwiYqnoaz6LiYynioCylWDxPYioV_9qpo 用油漆打开

【问题讨论】:

  • 请举个简单的数组和文字例子
  • 如果您的数据来自数据库,感觉您应该直接通过查询获得最终结果,而不是加载所有内容并进行过滤。
  • 你到底要数什么?
  • @AndreiFiordean 我想计算重复次数,因此 RT-SCB-PB01 为 5,ASDC-PBSN 为 2。
  • 请发布您的阵列的另一张图片,但打印如下:echo '&lt;pre&gt;'; print_r($row); echo '&lt;/pre&gt;'; die; 这样您就可以拥有它了

标签: php arrays pdo


【解决方案1】:

array_count_values

array_count_values() 返回一个数组,使用数组的值作为键,将它们在数组中的频率作为值。

$varArray = array(); // take a one empty array

foreach ($rowa as $rowsa)
{
    $sql = "SELECT count(*) as NUMBER FROM BANDZENDINGEN WHERE FB_AFGESLOTEN = 'F' AND FB_AKTIEF = 'T' AND FI_AFVOERKANAAL = 1 AND FI_RAYONID = $rowsa  AND FI_VERRIJKINGID < 1;";
    $sfh = $dbh->prepare($sql);
    $sfh->execute();
    $row = $sfh->fetchAll(PDO::FETCH_COLUMN, 0);

    array_push($row, $rows['FC_RAYON']);
    //print_r($row);
    //array_push($varArray,$rows['FC_RAYON']); // Also May I think $rows['FC_RAYON'] is give value like RT-SCB-PB01,ASDC-PBSN etc.
    array_push($varArray,$row[1]); // I have push the send value of array like RT-SCB-PB01,ASDC-PBSN etc. and make in single array.
}

$dupArrays = array_count_values($varArray); // It will return Counts all the values of an array
echo 'Total No Items: '.count($dupArrays).'<br><br>';
echo "<pre>";
print_r($dupArrays);
echo "</pre>";

输出将是:

Total No Items: 3

Array
(
    [RT-SCB-PB01] => 3 // Count of duplicate value of RT-SCB-PB01 is 3
    [ASDC-PBSN] => 4 // Count of duplicate value of ASDC-PBSN is 3
    [ASDW-PBSN] => 1 // Count of duplicate value of ASDW-PBSN is 3
)

使用foreach方法获取

foreach($dupArrays as $key => $value){
    echo $key.' Count '.$value.' times.';
    echo "<br>";
}

输出:

RT-SCB-PB01 Count 3 times.
ASDC-PBSN Count 4 times.
ASDW-PBSN Count 1 times.

【讨论】:

  • @nordin,你喜欢这个逻辑吗?
  • 这行得通,感谢您的帮助。你也知道如何正确地回显它吗?
  • 使用 foreach 方法可以回显它。
  • 好吧,我试过了,它只显示数字而不是名字。
  • @nordin 我已经更新了一个答案。使用数组键。现在你可以有一个想法了。
【解决方案2】:

你不能只做一个这样的查询吗:

$sql = "SELECT FI_RAYONID,COUNT(FI_RAYONID) as NUMBER 
    FROM BANDZENDINGEN 
    WHERE FB_AFGESLOTEN = 'F' 
    AND FB_AKTIEF = 'T' 
    AND FI_AFVOERKANAAL = 1  
    AND FI_VERRIJKINGID < 1 
    GROUP BY FI_RAYONID ;";
$sfh = $dbh->prepare($sql);
$sfh->execute();
$result = $sfh->fetch(PDO::FETCH_KEY_PAIR);

然后 $result 成为 id 和计数的键控数组,因此您可以更简单地使用它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多