【问题标题】:Trying to get output in the json format using json_encode() in php尝试在 php 中使用 json_encode() 以 json 格式获取输出
【发布时间】:2017-07-16 02:46:18
【问题描述】:

我正在尝试将输出设为:

{
   "1":{
      "word":"Apple",
      "definition":"This is a Fruit"
   },
   "2":{
      "word":"Grapes",
      "definition":"This is a Fruit too"
   },
   .
   . //so on
   .

}

我的php7源代码(ma​​in.php)是:

<?php
require 'configure.php';

$query = "SELECT * from entries where word LIKE 'Z%'";
$result = $conn->query($query);
$row = $result->fetch_array(MYSQLI_ASSOC);

$marks = array();

while ($row = $result->fetch_array()) {
    $marks[] =  array($row['sN'] => array(
        "word" => $row['word'],
        "definition" => $row['definition']
    ));     
}

var_dump(json_encode($marks));//(json_encode($marks));

/* free result set */
$result->free();

mysqli_close($conn);
?>

下面给出的代码生成我想要的输出:

$marks = array(
"mohammad" => array
(
"physics" => 35,
"maths" => 30,
"chemistry" => 39
),
"qadir" => array
(
"physics" => 30,
"maths" => 32,
"chemistry" => 29
),
"zara" => array
(
"physics" => 31,
"maths" => 22,
"chemistry" => 39
)
);
echo json_encode($marks);

我正在尝试在我的 ma​​in.php 中应用关联数组的概念 如何在上面的 ma​​in.php 中使用 LOOP 获得所需的 json 输出?

【问题讨论】:

  • json_encode($marks) 的输出是什么?你期望得到什么?
  • {"mohammad":{"physics":35,"maths":30,"chemistry":39},"qadir":{"physics":30,"maths":32, "化学":29},"zara":{"物理":31,"数学":22,"化学":39}}
  • 我希望得到上面的输出..!
  • json_encode($marks) 的输出是什么?你怎么能在你的数组中定义一些东西——单词和定义——并期望其他东西——物理、数学和化学——?
  • @HassanAhmed,我粘贴了两个代码:一个是 main.PHP,我想在其中获取 JSON 格式的输出,另一个是我从教程中复制的代码(包括物理化学和数学) )。忘记价值观吧。我只是希望它们采用我在问题上方发布的格式。 LIKE { "1":{ "word":"Apple", "definition":"This is a Fruit" }, "2":{ "word":"Grapes", "definition":"This is a Fruit too " }, . . //很快 。 }

标签: php json associative-array php-7


【解决方案1】:

尝试使用JSON_FORCE_OBJECT 作为json_encode() 函数的参数一次。像这样..

echo json_encode($marks,JSON_FORCE_OBJECT);

JSON_FORCE_OBJECT:使用非关联数组时输出对象而不是数组。当输出的接收者期待一个对象并且数组为空时尤其有用。

【讨论】:

  • 你在var_dump(json_encode($marks,JSON_FORCE_OBJECT));得到什么。
  • 我得到 bool(false)
  • 如果我替换 $marks[ ] = array($row['sN'] => array("word"=>$row['word'], "definition"=>$row[ '定义'] )); by $marks = array($row['sN'] => array("word"=>$row['word'], "definition"=>$row['definition'] ));我得到: {"176023":{"word":"Zythum","definition":"一种古老的麦芽饮料;一种由麦芽\n 和小麦制成的酒。"}} 这就是我们想要的。现在我怎样才能得到其他值
【解决方案2】:

我认为问题在于您如何分配 $marks 数组

while ($row = $result->fetch_array()) {
    $marks[$row['sN']] = array(
        "word" => $row['word'],
        "definition" => $row['definition']
    );     
}

你可以得到 0 个索引数组

$index = 0;
while ($row = $result->fetch_array()) {
    $marks[$index] = array(
        "word" => $row['word'],
        "definition" => $row['definition']
    );
    $index++;
}

【讨论】:

  • 它生成 bool(false)
  • 如果我替换 $marks[ ] = array($row['sN'] => array("word"=>$row['word'], "definition"=>$row[ '定义'] )); by $marks = array($row['sN'] => array("word"=>$row['word'], "definition"=>$row['definition'] ));我得到: {"176023":{"word":"Zythum","definition":"一种古老的麦芽饮料;一种由麦芽\n 和小麦制成的酒。"}} 这就是我们想要的。现在我怎样才能得到其他值?
  • 好吧,从你的代码中删除 $row['sN']$marks[],检查我的编辑
  • 生成 Json 格式的输出,但只有最后一行保存到变量 $marks
  • bool(false).... 尝试用 "$marks" 替换 "$marks[$index]" 它可以工作,但只有最后一行保存在 $marks 中。我认为我们必须处理数组到对象的转换。
猜你喜欢
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多