在PHP文件中创建的名称-值和键值对(用于json编码)
我从一个MySQL数据库生成PHP数组,并使用JSON_encode将输出转换为JSON(最终用于Twitter typeahead) 基于我所读到的关于PHP数组的所有内容,我曾期望在PHP文件中创建的名称-值和键值对(用于json编码),php,mysql,arrays,json,key-value,Php,Mysql,Arrays,Json,Key Value,我从一个MySQL数据库生成PHP数组,并使用JSON_encode将输出转换为JSON(最终用于Twitter typeahead) 基于我所读到的关于PHP数组的所有内容,我曾期望select查询为任何记录生成一个每列的键值对 相反,我似乎同时得到了名称-值对和键值对 例如,对于具有5列的表,单个记录的值集的形式如下: [fieldname1] => value1 [0] => value1 [fieldname2] => value2 [1] => value2
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'
或它的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;
?>
最后,这里是仅用于最终记录的json字符串(分解后的结构更容易看到)
由于性能原因,重复值非常重要,因为数据将被提取出来用于移动设备(使用Twitter TypeAhead和AngulularJS)。我们的数据集已经非常大了。。。因此,两次json将使获取数据的时间加倍
关键问题:如何在PHP阶段或json_编码阶段删除重复项,以便仅生成名称-值对,而不同时生成名称-值和键值对?
谢谢大家! 如果键为int,则可以将其取消设置
foreach($trade as $key=>$value) {
if(!is_int($key) {
unset($trade[$key]);
}
}
希望这有帮助:D假设您正在使用pdo:
$trade = $dbh->query($sql, PDO::FETCH_ASSOC);
你是如何接触到MySQL的(MySQL,mysqli,PDO)?你是如何得到结果的?你能澄清一下我把代码放在哪里了吗?听起来不错,但我不知道如何正确使用它。我试着把它放在最初的foreach块下面,但没有成功(只导致了一个“t_PAAMAYIM_NEKUDOTAYIM”错误)。我是否应该将您的代码块嵌套在现有的foreach中?将其放在初始foreach之前。它将重写直接来自DB的$trade:))错误是因为
$key=>value
它确实是一个解析错误:D它应该是$key=>value
。记住:这总是关于$
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 )
)
foreach($trade as $key=>$value) {
if(!is_int($key) {
unset($trade[$key]);
}
}
$trade = $dbh->query($sql, PDO::FETCH_ASSOC);