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_Json_Ajax - Fatal编程技术网

Php 正确json格式的数据

Php 正确json格式的数据,php,json,ajax,Php,Json,Ajax,我正在开发我的网站的一个功能,我需要点击按钮触发一个ajax调用。我正在接收以下格式的数据: Object { name: "abc", category_id: "1" } 我想要这样的结果: { "list" : [ { "name" : "xyz", "category_id" : "1" }, { "name" : "abc", "ca

我正在开发我的网站的一个功能,我需要点击按钮触发一个ajax调用。我正在接收以下格式的数据:

Object {
    name: "abc",
    category_id: "1"
}
我想要这样的结果:

{
    "list" : [
        {
            "name" : "xyz",
            "category_id" : "1"
        }, {
            "name" : "abc",
            "category_id" : "11"
        }
    ]
}
我的服务器端代码是:

<?php

header('Content-Type: application/json');

$conn = mysqli_connect("localhost","root","","test") or die(mysqli_error());
$name = $_GET['name'];
$sql = "SELECT * from test_search where name = '$name'";
$result = mysqli_query($conn,$sql) or die(mysqli_error($conn));

while($row = mysqli_fetch_array($result)) {
    $name = $row['name'];
    $category = $row['category_id'];
}
$data = array("name" => $name , "category_id" => $category );
echo json_encode($data);
?>

之前,您将$row数组项分配给变量,然后直到循环结束后才使用它们。在循环之后,您使用了这些变量,但它只包含最后的值。您必须将项目附加到数组内部的数组(“列表”),然后
json\u encode()
从循环中获取结果以获得所需的效果

<?php
$conn = mysqli_connect("localhost","root","","test") or die(mysqli_error());
$name = $_GET['name'];
header('Content-Type: application/json');
$sql = "SELECT * from test_search where name = '$name'";
$result = mysqli_query($conn,$sql) or die(mysqli_error($conn));

$data_array = array('list' => array());
while($row = mysqli_fetch_array($result))
{
    $data_array['list'][] = array("name" => $row['name'], "category_id" => $row['category_id'] );
}
echo json_encode($data_array);
?>

之前,您将$row数组项分配给变量,然后直到循环结束后才使用它们。在循环之后,您使用了这些变量,但它只包含最后的值。您必须将项目附加到数组内部的数组(“列表”),然后
json\u encode()
从循环中获取结果以获得所需的效果

<?php
$conn = mysqli_connect("localhost","root","","test") or die(mysqli_error());
$name = $_GET['name'];
header('Content-Type: application/json');
$sql = "SELECT * from test_search where name = '$name'";
$result = mysqli_query($conn,$sql) or die(mysqli_error($conn));

$data_array = array('list' => array());
while($row = mysqli_fetch_array($result))
{
    $data_array['list'][] = array("name" => $row['name'], "category_id" => $row['category_id'] );
}
echo json_encode($data_array);
?>

您需要将$name和$category变量推到另一个数组中-目前您只是在while循环中重写这些值

做一些类似于:

$list = array();
while($row = mysqli_fetch_array($result))
{
  $list[] = array('name'=>$row['name'], 'category_id'=>$row['category_id']);
}
$data = array('list'=>$list);
echo json_encode($data);

您需要将$name和$category变量推送到另一个数组中——目前您只是在while循环中覆盖这些值

做一些类似于:

$list = array();
while($row = mysqli_fetch_array($result))
{
  $list[] = array('name'=>$row['name'], 'category_id'=>$row['category_id']);
}
$data = array('list'=>$list);
echo json_encode($data);

在这里阅读有关PHP数组的内容-

另外,在直接跳转到
json\u encode($data)
之前,请尝试
var\u dump($data)
查看您使用的是什么

您需要在while循环中构建阵列

$data = [];

while($row = mysqli_fetch_array($result)) {
   $data['list'][] = [
      'name' => $row['name'],
      'category' => $row['category']
   ]
}

echo json_encode($data);

未经测试,但应能满足您的需要。

请阅读这里的PHP数组-

另外,在直接跳转到
json\u encode($data)
之前,请尝试
var\u dump($data)
查看您使用的是什么

您需要在while循环中构建阵列

$data = [];

while($row = mysqli_fetch_array($result)) {
   $data['list'][] = [
      'name' => $row['name'],
      'category' => $row['category']
   ]
}

echo json_encode($data);

未经测试,但应该能满足您的需要。

代码末尾的“s”是故意的吗?我假设这只是测试,但在生产中不要使用此代码,而不转义用户提交的数据。代码末尾的“s”是故意的吗?我假设这只是测试,但是-在生产中使用此代码时,不要转义用户提交的数据。你快到了<代码>数组('list')
不表示
列表
索引,它表示数组包含
列表
元素。正确的数组声明应该是
$data\u array=array()
@RajdeepPaul抱歉,已经有一段时间没有使用JSON了。编辑答案:)谢谢你的提醒。
$data\u array['list'][
是正确的,NTL upvote来自我。:-)@哦,我真蠢!是的,我明白你在说什么@但是,当您重新添加列表索引时,忘记了添加要附加到内部数组的开括号和闭括号。我纠正了。我以前的错误是简单地将“list”作为字符串项添加到父数组中,而不是将其作为索引添加到父数组中<代码>数组('list')
不表示
列表
索引,它表示数组包含
列表
元素。正确的数组声明应该是
$data\u array=array()
@RajdeepPaul抱歉,已经有一段时间没有使用JSON了。编辑答案:)谢谢你的提醒。
$data\u array['list'][
是正确的,NTL upvote来自我。:-)@哦,我真蠢!是的,我明白你在说什么@但是,当您重新添加列表索引时,忘记了添加要附加到内部数组的开括号和闭括号。我纠正了。我以前的错误是简单地将“list”作为字符串项添加到父数组中,而不是将索引添加到父数组中。