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