我真的不知道发生了什么。故事: 我在数据库上使用PDO作为SELECT语句。
API specs
这样很好,而且很有效。当我 var_dump $sql = "SELECT a,b,c,performance,points,compare
FROM normvalues
WHERE x=:x AND y=1 AND z=:z";
$stmt = $GLOBALS['PDO']->prepare($sql);
$stmt->bindParam(":x",$x);
$stmt->bindParam(":z",$z);
$stmt->execute();
$res=$stmt->fetchAll(PDO::FETCH_ASSOC);
变量时,我会得到类似的结果:
$res
那也没关系。但我必须以另一种方式对结果进行排序。所以我在做:
array(6) {
["a"]=> string(2) "44"
["b"]=> string(4) "1176"
["c"]=> string(4) "1166"
["performance"]=> string(4) "50.1"
["points"]=> string(1) "1"
["compare"]=> string(2) "-1"
}
[1]=>
array(6) {
["a"]=> string(2) "57"
["b"]=> string(4) "1176"
["c"]=> string(4) "1166"
["performance"]=> string(4) "47.7"
["points"]=> string(1) "2"
["compare"]=> string(2) "-1"
}
[2]=>
array(6) {
["a"]=> string(2) "70"
["b"]=> string(4) "1176"
["c"]=> string(4) "1166"
["performance"]=> string(4) "44.7"
["points"]=> string(1) "3"
["compare"]=> string(2) "-1"
}
...
现在我完全迷失了。通过分配foreach($res as $e){
$this->normTable[$e['a']][$e['points']]=$e['performance'];
$this->normTable[$e['a']]['compare']=$e['compare'];
}
我得到错误的值。实际上这应该是性能值。
$e['performance']
我已经检查了数据库中的值,它们是正确的。通过执行 [1176]=>
array(4) {
[1]=> string(2) "50"
["compare"]=> string(2) "-1"
[2]=> string(2) "48"
[3]=> string(2) "45"
}
我会得到正确的值,但问题是并非每个值都是double,而是整数或字符串。我也尝试用(字符串)进行类型转换,但结果相同。我没有解释。
更新
这是一个非常大的项目,我只是尽量减少它,尽可能地让我的问题变得清晰。但现在我发现了一些新的东西: 我在循环期间在normTable中做了第一个变量的'echo()':
doubleval()
,值从'50 .1'变为'50'。仍然无法弄清楚原因。 PHP中是否存在数组的大小限制?
更新2和一个很大的抱歉!
正如我所说,这是一个很大的项目。因此,我读出的表格中,某些属性的值有两次或更多。实际上这种情况不应该发生。这就是为什么答案很简单:它变成了50,因为分配了50。我很抱歉让你的时间缩短了。但我完全排除了这种情况,因为我也用C编码,我的第一个想法是:内存泄漏 - 明显的情况!
感谢您的帮助。
答案 0 :(得分:0)
如果在循环中替换a,则应获得预期结果(给定数据样本)。即:
foreach($res as $e){
$this->normTable[$e['b']][$e['points']]=$e['performance'];
$this->normTable[$e['b']]['compare']=$e['compare'];
}
但我不确定这真的能解决你的问题。 YMMV。