来自MySQL的PHP​​ Count Arrays计数不正确

时间:2016-09-10 09:49:17

标签: php mysql arrays count

我无法正确计算从数据库中提取的数组中的元素。请参阅下面的代码:

// 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)

最诚挚的问候和提前谢谢,

约什

3 个答案:

答案 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);
}

然而,最好的计算方法是简单地执行SQ​​L 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;