[英]PHP Count Arrays from MySQL counts Incorrectly
我无法正确计算从数据库中提取的数组中的元素。 请在下面查看我的代码:
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn)
{
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully!";
//NEW QUERY TO OUR DATABASE
$query = $conn -> query("Select distinct Race from Races");
while($race[] = $query->fetch_object());
//Check how many elements are within our query
$racecount = count($race);
echo "<br>" . $racecount . "<br><br>";
$racecount = count($race,COUNT_RECURSIVE);
echo "<br>" . $racecount . "<br><br>";
var_dump($race);
echo "<br><br><br>";
两种方式同时使用两种类型的count()会产生相同的结果“ 4”。 但是,请从我的var_dump查看结果。
array(4) { [0]=> object(stdClass)#3 (1) { ["Race"]=> string(5) "Human" } [1]=> object(stdClass)#4 (1) { ["Race"]=> string(7) "Vampire" } [2]=> object(stdClass)#5 (1) { ["Race"]=> string(5) "Demon" } [3]=> NULL }
Var_dump显示它是一个包含4个元素的数组。 所以计数是正确的,只是没有给我我想要的电话号码。
因此,我有三个问题。
1)如何正确计算元素?
2)有人可以向我解释为什么这读作四个要素吗?
3)我的数组不是多维的吗? (因为两个计数产生的结果相同为4)
在此致以最诚挚的问候和谢意,
乔希
`while($race[] = $query->fetch_object());`
$query->fetch_object()
返回一个null
,指示数据集中没有更多条目,但是您仍将该null
值作为最后一个条目分配给$race
数组,然后才允许while
终止其循环....这就是为什么数组中有4个条目而不是3个的原因。
您的数组不是多维的,因为存储在$races
数组中的实体是对象 ,而不是数组; 如果它是一个数组数组,它将是多维的
原因实际上很简单。 当使用while($race[] = $query->fetch_object())
将数据插入数组while($race[] = $query->fetch_object())
您总是插入最终的$query->fetch_object()
,该值等于null
。 那就是当您退出while
循环时。 因此,就像您自己的var_dump
一样,数组的最后一项将始终为null
。
解决此问题的一种方法就是简单地从结果中减去1。 另一种方法是实现这样的插入:
$race = [];
while($row = $query->fetch_object()) {
array_push($race , $row);
}
最好的计数方法是简单地执行一个SQL COUNT命令:
$query = $conn->query("SELECT COUNT(DISTINCT Race) FROM Races");
您的php计数返回的是结果对象中字段的数量,而不是行的数量。
对您的SQL查询尝试以下操作:
$query = $conn->query("SELECT COUNT(DISTINCT Race) FROM Races");
如果您希望使用与现在相同的查询,请尝试:
$raceCount = $query->num_rows;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.