【发布时间】:2014-08-20 09:56:10
【问题描述】:
我是 php 和 mysql 的新手。我有一个数据库,其中有一个表 user_entries 和两列 max_val 和 num。
我使用下面的代码将我的两列提取到数组中,然后使用下面的函数numberTimesOver 来确定@987654325@ 时$val[$i] = 10 的次数。数字范围从 0 到 10。
当我将函数与表中的两个数组一起使用时,我得到的输出为零,而它应该是 4。当我使用 $a 和 $b 数组时,我得到的输出为 2。
我哪里出错了?当我尝试将表列转换为数组时,我认为我出错了。
<?php
require_once('functions.php');
$mysqli = new mysqli('localhost', 'root', NULL, 'practice');
$val_sql = "SELECT `max_val` FROM `user_entries`";
$valData = $mysqli->query($val_sql);
$num_sql = "SELECT `num` FROM `user_entries`";
$numData = $mysqli->query($num_sql);
$val = array();
while($row = $valData->fetch_assoc())
{
$val[]= $row;
}
$num = array();
while ($row = $numData->fetch_assoc())
{
$num[] = $row;
}
//$a = [10, 4, 5, 8, 3];
//$b = [10, 6, 10, 10, 2];
function numberTimesOver($number, $max, $limit) {
$sum = 0;
for ($i = 0; $i < count($max); $i++)
{
if ($max[$i] == 10 && $number[$i] > $limit)
{
$sum += 1;
}
}
print($sum);
}
numberTimesOver($val, $num, 6)
【问题讨论】:
-
您的代码将返回类似
[["num" => 10], ["num" => 6], ["num" => 10], ...]的数组。显然,您的numberTimesOver函数未设置为处理这种格式,因为它希望每个数组项都是标量(整数)值。另外,为什么要两个查询?如果没有ORDER BY子句,就不能保证$val和$num的索引条目将属于相同的元组 -
好的,我现在明白 fetch_assoc 不会以整数形式返回数组,这就是它不起作用的原因。我使用了两个查询,所以我可以分别提取两列。我看到了 ORDER BY 并且不太确定如何去做,所以我认为这可能会起作用。我将如何将数组转换为整数数组?