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

时间:2015-03-28 21:27:25

标签: php mysql

使用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 Jack Ane。然后它向我展示了所有20 Jack Ane而不是一个,因为我只想要它一次。

很抱歉,如果它令人困惑。

感谢。

5 个答案:

答案 0 :(得分:4)

如果您不使用any,我传统使用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);

希望能帮助你。

答案 1 :(得分:2)

我建议你重写一下你的查询。如果你能以正确的方式做到这一点,你将获得更快的解决方案,不需要新阵列和不必要的&#34; isset&#34;检查。

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

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

$sql="SELECT * from table WHERE blablabla";
$result = $this->db->query($sql);
$result->rowCount(); // here

然后你可以获取$ result-&gt; fetchAll();并打印数据。

答案 2 :(得分:1)

您可以在两列中执行SELECT DISTINCTGROUP BY以使数据库完成工作并消除PHP中的重复检查。为此,您可以使用以下内容:

SELECT DISTINCT first_name, last_name FROM users;

SELECT first_name, last_name FROM users GROUP BY first_name, last_name;

DISTINCT更简洁,GROUP BY支持更多灵活性。

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

$count = count($container);

答案 3 :(得分:1)

你可以做一个简单的变量,在你的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.";
    }
    ?>

答案 4 :(得分:0)

使用:

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