使用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而不是一个,因为我只想要它一次。
很抱歉,如果它令人困惑。
感谢。
答案 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 DISTINCT
或GROUP 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);