Я действительно не знаю, что происходит. История: Я использую PDO для оператора SELECT в базе данных.PHP: неправильное значение после присвоения
$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);
Так что все в порядке, и оно работает. Когда я var_dump переменная $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"
}
Я уже проверил значения в базе данных, и они верны. Делая doubleval()
, я получаю правильные значения, но проблема в том, что не каждое значение является двойным, но также целым или строковым. Я также попытался придать тип (строка), но это тот же результат. У меня нет объяснений.
Update:
Это очень большой проект, и я просто попытался свести его к минимуму, насколько это возможно и сделать мою проблему как можно четче. Но теперь я понял, что-то новое: я делаю «эхо()» моей первой переменной в normTable во время цикла:
foreach($res as $e){
$this->normTable[$e['a']][$e['points']]=$e['performance'];
echo "a:".$e['a']." pt: ".$e['points']." perf: ".$e['performance']."-".$this->normTable[1176][1]."\n";
$this->normTable[$e['a']]['compare']=$e['compare'];
}
и значение меняется от '50 .1' до „50“. Все еще не могу понять причину. Существует ли ограничение размера массивов на PHP?
ОБНОВЛЕНИЕ 2 и большое ИЗОБРАЖЕНИЕ!
Как я уже сказал, это большой проект. Таким образом, таблица, которую я читал, имеет несколько значений для некоторых атрибутов два или более. На самом деле такого случая не должно быть. Вот почему ответ прост: он стал 50, потому что 50 было назначено. Мне очень жаль, что ты оставил свое время. Но я полностью исключил этот случай, и, поскольку я также кодирую в C, моя первая мысль была: утечка памяти - ясный случай!
Благодарим за помощь.
Но что вы пытаетесь сделать? – user2182349
Я прочитал массив из моей базы данных и отсортировал его в другом массиве, чтобы использовать его в своем коде: у меня есть категории (p.e. 1176), и каждая категория может получить 1-3 балла по определенной производительности ... – user3240316
минимальный пример? вам нужна база данных для воспроизведения проблемы? –