【问题标题】:Add a common word to all json_encode() data为所有 json_encode() 数据添加一个通用词
【发布时间】:2015-09-02 23:51:34
【问题描述】:

我正在使用json_encode() 从 MySQL 检索数据。

$sd=array();
foreach($rslt as $val){
     $sd[] = $val; 
}
echo json_encode($sd);

我的问题是如何在所有结果中添加“等级”一词?

例子:如果输出是

97
38
73

我如何得到结果:

grade97
grade38
grade73

Json 输出示例:

[{"physics":"97","0":"97","chemistry":"38","1":"38","agriculture":"73","2":"73"}]

【问题讨论】:

  • 你可以在 sql 中使用 concat('grade',fieldname) 等

标签: php mysql json pdo


【解决方案1】:

您不应该这样污染您的数据,因为您将来可能需要原始值,并且您将发送大量冗余信息(重复的单​​词)。

相反,我会在另一个参数中添加您想要发送的附加信息。

例如:

$sd=array();
foreach($rslt as $val){
     $sd[] = $val; 
}

// add another chunk of information
$translations = array('grade' => 'Grade');

// send everything in one json string
echo json_encode(array('data' => $sd, 'translations' => $translations));

现在您可以在接收端正确构建输出,发送的信息更少,并且在需要时可以使用原始值。

【讨论】:

  • 感谢您的意见。实际上,在所有这些数据中都有“等级”这个词是必不可少的。但我的想法是减少 MYSQL 上数据的长度,并在从数据库中检索数据时做类似的事情。希望这可以制作场景?
  • @Becky 只需在构建 (html?) 输出时添加单词。
  • 是的,这是另一种选择。你是说在html中添加“等级”比在php本身中添加更好或更安全?
  • 他是对的。渲染 HTML(视图)时最好添加“等级”一词。
  • @Becky 您在哪里以及如何在 javascript 中构建 html / 输出?如果是这样,在此处执行并且只发送一次单词,会使您的系统更具响应性,因为您必须发送更少的数据。没有安全改进或类似的东西。
【解决方案2】:

你需要做的就是像这样连接字符串:

foreach($rslt as $val){
    foreach($val as &$grade){
         $grade = "Grade ".$grade;
    }
    $sd[] = $val;
}

但是,您应该清理阵列。你目前有这个结构:

array(
    array(
        "0" => 97,
        "1" => 38,
        "2" => 73,
        "physics" => 97,
        "chemistry" => 38,
        "agriculture" => 73,
    )
);

我会重做产生这个数组的代码,这样你就会得到这样的结果:

array(
    array(
        "class" => "physics",
        "grade" => 97
    ),
    array(
        "class" => "chemistry",
        "grade" => 38
    ),
    array(
        "class" => "agriculture",
        "grade" => 73
    ),
);

它更适合迭代,并且更具可读性。

【讨论】:

  • 除了从生成的json看来$val是一个数组。
  • 我收到一个错误。 Notice: Array to string conversion in path/my.php on line... ["CArray"]它指向这条线$sd[] = "Grade ".$val;
  • 好的,我不知道这是一个数组。现在试试吧,我更新了我的答案
  • 你能解释一下这个&$grade吗? & 是干什么用的?
  • 这意味着您通过引用而不是值传递。换句话说,由于我们正在遍历一个数组并且我们想要更改变量 $grade 而不必创建额外的变量,我们通过引用传递 $grade ,这样一旦循环完成,您的初始数组就会进行更改。希望这是有道理的
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多