Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP文件中创建的名称-值和键值对(用于json编码)_Php_Mysql_Arrays_Json_Key Value - Fatal编程技术网

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

在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

我从一个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'
或它的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);