我无法正确计算从数据库中提取的数组中的元素。请参阅下面的代码:
// 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)有人可以向我解释为什么这会读作4个元素吗?
3)我的阵列不是多维的吗? (因为两个计数产生相同的结果4)
最诚挚的问候和提前谢谢,
约什
答案 0 :(得分:1)
`while($race[] = $query->fetch_object());`
$query->fetch_object()
返回null
表示数据集中没有其他条目,但您仍然将null
值分配给$race
数组作为最后一个条目,然后只允许while
终止它的循环....这就是为什么你在数组中有4个条目而不是3个。
您的数组不多维,因为存储在$races
数组中的实体是对象,而不是数组;如果它是一个数组数组
答案 1 :(得分:0)
原因实际上非常简单。使用while($race[] = $query->fetch_object())
将数据插入数组时,您始终会插入最终$query->fetch_object()
,它将等于null
。那是退出while
循环的时候。因此,您的数组的最后一项始终为null
,就像您自己的var_dump
一样。
解决此问题的一种方法就是从结果中减去1。另一种方法是实现这样的插入:
$race = [];
while($row = $query->fetch_object()) {
array_push($race , $row);
}
然而,最好的计算方法是简单地执行SQL COUNT命令:
$query = $conn->query("SELECT COUNT(DISTINCT Race) FROM Races");
答案 2 :(得分:-1)
您的php计数返回结果对象上的字段数量,而不是行数。
尝试使用此SQL查询:
$query = $conn->query("SELECT COUNT(DISTINCT Race) FROM Races");
如果您希望使用与现在相同的查询,请尝试:
$raceCount = $query->num_rows;