【发布时间】:2014-12-19 04:31:41
【问题描述】:
我正在从 MySQL 数据库生成 PHP 数组,并使用 json_encode 将输出转换为 JSON(最终与 Twitter typeahead 一起使用)。
根据我所阅读的有关 PHP 数组的所有内容,我曾预计 select 查询会生成 - 对于任何记录 - 每列只生成一个键值对。
相反,我似乎得到both 名称-值对和键-值对。
例如,对于一个有 5 列的表,单条记录的值集采用以下形式:
[fieldname1] => value1 [0] => value1
[fieldname2] => value2 [1] => value2
[fieldname3]] => value3 [2] => value3
[fieldname4]=> value4 [3] => value4
[fieldname5] => value5 [4] => value5
当我使用 json_encode 时,它会为该记录生成以下 JSON 字符串 - 这是所需时间的两倍,因为我同时获得了名称-值对和键-值对(因此值重复非常线)。
"fieldname1":"value1","0":"value1",
"fieldname2":"value2","1":"value2",
"fieldname3":"value3","2":"value3",
"fieldname4":"value4","3":"value4",
"fieldname5":"value5","4":"value5",
我更喜欢 'fieldname1' => 'value1' 或其 json 等效项。
这是我在 PHP 中用于从数据库中选择数据的代码示例。
<?php
$sql = "SELECT * FROM `tr_trades_anzsco` WHERE `trade_alias_id` > 898";
$trade = $dbh->query($sql);
foreach($trade as $trade):
$trade_alias_id = $trade['trade_alias_id'];
$trade_alias = trim($trade['trade_alias']);
print_r($trade);
endforeach;
?>
这是仅包含三个记录的结果数据集。
Array ( [trade_alias_id] => 899 [0] => 899 [trade_alias] => Boilermaker [1] => Boilermaker [ANZSCO_title] => Structural Steel And Welding Trades Workers [2] => Structural Steel And Welding Trades Workers [ANZSCO_code] => 322300 [3] => 322300 [source] => Raj [4] => Raj ) Array ( [trade_alias_id] => 900 [0] => 900 [trade_alias] => Welder [1] => Welder [ANZSCO_title] => Structural Steel And Welding Trades Workers [2] => Structural Steel And Welding Trades Workers [ANZSCO_code] => 322300 [3] => 322300 [source] => Tom [4] => Tom ) Array ( [trade_alias_id] => 901 [0] => 901 [trade_alias] => Rigger [1] => Rigger [ANZSCO_title] => Construction Rigger [2] => Construction Rigger [ANZSCO_code] => 821711 [3] => 821711 [source] => Jack [4] => Jack )
最后,这里是仅用于最终记录的 json 字符串(分解以便更容易看到结构)。
Array ( [0] => Array (
[trade_alias_id] => 901 [0] => 901
[trade_alias] => Rigger [1] => Rigger
[ANZSCO_title] => Construction Rigger [2] => Construction Rigger
[ANZSCO_code] => 821711 [3] => 821711
[source] => Jack [4] => Jack )
)
出于性能原因,重复值非常重要 - 因为要提取数据以在移动设备上使用(使用 Twitter TypeAhead 和可能的 AngularJS)。我们的数据集已经非常大了......所以两倍的 json 将使获取数据的时间加倍。
关键问题:如何在 PHP 阶段或 json_encode 阶段删除重复项,以便仅生成名称-值对,而不是同时生成名称-值和键值对?强>
谢谢!
【问题讨论】:
-
你是如何到达 MySQL 的(mysql_、mysqli_、PDO)?你是如何获取结果的?
标签: php mysql arrays json key-value