PHP-计算foreach中显示的结果数

PHP-计算foreach中显示的结果数,php,mysql,Php,Mysql,使用foreach循环,我想计算显示多少结果。例如,如果它正在显示 Jack Ane Steve Jobs Sara Bill 我想重申有3个结果 同样,如果 Marc Kil Bill Smith 我想重申有2个结果 这对我来说有点棘手,因为这是我的代码: <div> <?php $container = array(); if (is_array($row)) { foreach (

使用
foreach
循环,我想计算显示多少结果。例如,如果它正在显示

Jack Ane
Steve Jobs
Sara Bill
我想重申有
3个
结果

同样,如果

Marc Kil
Bill Smith
我想重申有
2个
结果

这对我来说有点棘手,因为这是我的代码:

<div>
        <?php
        $container = array();
        if (is_array($row))
        {
            foreach ($row as $data) {
                if(!isset($container[$data->first_name .  $data->last_name])) {
                    $container[$data->first_name . $data->last_name] = $data;
                    echo $data->first_name . " " .$data->last_name . "</div>";
                }
            }
        }
        ?>

    </p>
</div>

我怎样才能做到这一点呢?由于这些值直接来自数据库,所以我曾考虑对数据库进行计数,但数据库中存在重复值,因为我正在使用名字和姓氏记录用户的视图。因此,当我尝试这样做时,比如说,我的数据库中有
20
jackane
。然后它向我展示了所有的
20
Jack Ane,而不是一个,因为我只想要一次

如果让人困惑的话,很抱歉


谢谢。

您可以跨两列执行
选择DISTINCT
分组操作,让数据库完成工作,并消除
PHP
中的重复检查。要做到这一点,您可以使用以下方法:

SELECT DISTINCT first_name, last_name FROM users;

SELECT first_name, last_name FROM users GROUP BY first_name, last_name;
DISTINCT
更简洁,而
groupby
支持更大的灵活性

在您的示例中,由于您正在构建关联数组,因此您可以在循环后执行
count()
,但如果让数据库执行,则代码会更干净:

$count = count($container);

如果不使用,我会使用count()来执行此操作:

foreach ($row as $data) {
    if(!isset($container[$data->first_name .  $data->last_name])) {
        $container[$data->first_name . $data->last_name] = $data;
            echo $data->first_name . " " .$data->last_name . "</div>";
    }
}
echo "Results: " . count($row);
foreach($row作为$data){
如果(!isset($container[$data->first\u name.$data->last\u name])){
$container[$data->first\u name.$data->last\u name]=$data;
echo$data->first_name.““$data->last_name.”;
}
}
回声“结果:”。计数(行);
希望对您有所帮助。

使用:

echo "Results: " . count($container);

你可以做一个简单的变量,在你的foreach中递增,给你精确的计数,然后使用这个变量根据它的值创建动作。因为如果您计算容器,并且希望过滤掉容器内的结果,那么您将无法获得过滤的数量

<?php
    $container = array();
    if (is_array($row))
    {
        $count = 0;
        foreach ($row as $data) {
            if(!isset($container[$data->first_name .  $data->last_name])) {
                $container[$data->first_name . $data->last_name] = $data;
                echo $data->first_name . " " .$data->last_name . "</div>";
                $count++;
            }
        }
    }
    if ($count > 0) {
        echo "There were $count results.";
    }
    ?>

我建议您重写查询。如果您能以正确的方式完成此操作,您将获得更快的解决方案,而不需要新阵列和不必要的“isset”检查

从查询中获取重复数据的原因可能是: 1-错误的查询逻辑 2-查询是可以的,但您需要使用DISTINCT或GROUP BY删除重复项

如果使用PDO,则只需使用rowCount()方法即可获得返回的行数


然后您可以获取$result->fetchAll();和打印数据。

只需从数据库查询中删除重复项,您就不需要进行if测试,只需简单地计算我使用Codeigniter所做的结果。我不能让它工作<代码>$count\u log\u value\u users=$this->db->get\u where('log\u table',array('pid'=>$pid',uid!='=>0))->num\u rows()
如果($query->num_rows()==0){}
CI的DataMapper是否支持查询中的DISTINCT?是的,它支持<代码>$this->db->distinct()但是,它对我不起作用。谢谢。我会记下这一点。希望我能把所有的答案都选为最好的。
$sql="SELECT * from table WHERE blablabla";
$result = $this->db->query($sql);
$result->rowCount(); // here