php - 名称-值和键-值对均在 PHP 文件中创建(用于 json 编码)

标签 php mysql arrays json key-value

我正在从 MySQL 数据库生成 PHP 数组,并使用 json_encode 将输出转换为 JSON(最终用于 Twitter typeahead)。

根据我读到的有关 PHP 数组的所有内容,我预计 select查询生成 - 对于任何记录 - 每列仅生成一个键值对。

相反,我似乎同时得到两者一个名称-值对和一个键-值对

例如,对于包含 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 和可能的 AngulularJS)。我们的数据集已经非常大了……所以两倍的 json 将使获取数据的时间加倍。

关键问题:如何在 PHP 阶段或 json_encode 阶段删除重复项,以便仅生成名称-值对,而不是同时生成名称-值和键-值对?

谢谢!

最佳答案

假设您正在使用 pdo:

$trade = $dbh->query($sql, PDO::FETCH_ASSOC);

关于php - 名称-值和键-值对均在 PHP 文件中创建(用于 json 编码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26529234/

相关文章:

javascript - 从 div 动态获取 iFrame 代码

php - 使用 Sentry 登录 Facebook,用户 [email] 需要密码,没有给出

php - 获取 Laravel GroupBy 的平均计数

带有数学运算的 MySQL 子查询

Java 字节操作 - 将 3 字节转换为整数数据

php - 每个人显示一个按日期排序的结果

php - Laravel - 从@include 修改并返回变量

MYSQL - 左连接双重关系?

JavaScript 数组排序通过对相同元素求和

javascript - Polymer:以两种方式绑定(bind)到 Dom-Repeat 模板内的子元素