我有一个按列排序的 mysql 查询。如果我只运行 php.ini 就可以正常工作。我用json_encode发给客户端后,顺序改成了主键。为什么会这样,有解决办法吗?
查询看起来像:
try{
$dbh = new PDO('mysql:host=localhost;dbname=Batik', 'root', 'root');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$_SESSION['table'] = $_SESSION['category'] = $table = $_GET['button'];
$count = $dbh->query("SELECT * FROM $table ORDER BY `order` ASC");
$count->setFetchMode(PDO::FETCH_ASSOC);
$myarray = array();
while ($row = $count->fetch()) {
$id = array_shift($row);
$myarray[$id] = $row;
}
print json_encode($myarray);
} catch (PDOException $exception) {
echo "There was an error uploading your information, please contact James for assistance. ";
error_log($exception->getMessage());
};
所以,我想要并在普通 php 中获得的输出是这样的:(ID = primary_key)
Order: ID: Location:
1 4 foto1.jpg
2 5 foto3.jpg
3 3 foto2.jpg
4 2 foto4.jpg
5 1 foto5.jpg
在我对数组进行 json_encode 并输出到客户端后,我得到了这个:(ID = primary_key)
Order: ID: Location:
5 1 foto5.jpg
4 2 foto4.jpg
3 3 foto2.jpg
1 4 foto1.jpg
2 5 foto3.jpg
我希望这是有道理的。
最佳答案
如果您使用带数字的文字对象,客户端会自动对数组进行排序。 因此,如果您遗漏了 id,您应该会得到正确的内容。
替换
while ($row = $count->fetch()) {
$id = array_shift($row);
$myarray[$id] = $row;
}
//doing so you create this
json array=[
0=undefined,
1={order:5,id:1;location1},
2={order:4,id:2;location2},
3={order:3,id:3;location3},
4={order:2,id:4;location4},
]
//error
与
while ($row = $count->fetch()) {
$myarray[] = $row;
}
基本上您将文字对象转换为一个简单的数组。如果您开始删除一些图像,这可能会导致一些错误。
那么您可能只需要 id 和位置
所以
SELECT id,location FROM ... ORDER BY order ASC
你有
[[1,location1],[2,location2]]
或
[{id:1,location:"location1"},{id:2,location:"location2"}]
//0 wich is order 1 //1 wich is order 2
您的 mysql 查询创建的排序顺序是 json 数组索引。
关于php - Json_encode 改变我查询的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693404/