在Json/PHP中为数组命名

在Json/PHP中为数组命名,php,jquery,json,Php,Jquery,Json,在AJAX中,我在数据库中按类别(例如,类别发票、订单等)检索文档的最后日期,这要归功于此请求:   // In each category there can be several documents $stmt = $bdd->prepare('SELECT file_name, max(file_creation) as file_creation, file_category FROM all_files WHERE ... GROUP BY file

在AJAX中,我在数据库中按类别(例如,类别发票、订单等)检索文档的最后日期,这要归功于此请求:

  // In each category there can be several documents
  $stmt = $bdd->prepare('SELECT file_name, max(file_creation) as file_creation, file_category
    FROM all_files
    WHERE ... 
    GROUP BY file_category');
  $stmt ->execute(array(
    ...
  ));
  $arr = $stmt->fetchAll();
  echo json_encode($arr);
所以我用JSON把它拿回来:

[
   {
      "File_name": "order_18"
      "0": "order_18"
      "File_creation": "2018-11-28"
      "1": "2018-11-28"
      "File_category": invoice "
      "3": invoice "
   }
   {
      "File_name": "order_18"
      "0": "order_18"
      "File_creation": "2018-11-25"
      "1": "2018-11-25"
      "File_category": "order"
      "3": "order"
   }
]
然后我想用jquery将每个数据放在正确的位置,如下所示:

$ ('#label-order').text('') // the text will have to be: 2018-11-25
$ ('#label-invoice').text('') // the text will have to be: 2018-11-28
问题是,我不知道如何恢复我感兴趣的数据,以便将其放在正确的位置,因为类别的数量会随着时间的推移而增加

所以我想做一些类似的事情,将数据返回数据
[“发票”][“文件创建”]
和数据
[“订单”][“文件创建”]

可能吗?如果是,我该怎么办?
有更好的解决方案吗?

这里有一个代码,分别包含在发票和订单的结果列表中。 在前端接收数据后,您可以使用简单的代码对所有项目进行分组:

var data = [
   {
      "File_name": "order_18",
      "0": "order_18",
      "File_creation": "2018-11-28",
      "1": "2018-11-28",
      "File_category": "invoice",
      "3": "invoice "
   },
   {
      "File_name": "order_18",
      "0": "order_18",
      "File_creation": "2018-11-25",
      "1": "2018-11-25",
      "File_category": "order",
      "3": "order"
   }
]

var categories = {
    invoices: [],
    orders: []
}

data.map((item) => {
  if(item['File_category'] === 'order') {
    categories.orders.push(item)
  } else if(item['File_category'] === 'invoice') {
    categories.invoices.push(item)
  }
}) 

console.log(categories)

然后,您可以在特定类别(如categories.invoices或categories.orders)上循环,并轻松地将其附加到正文中。

以下是一段代码,分别包含在发票和订单的结果列表中。 在前端接收数据后,您可以使用简单的代码对所有项目进行分组:

var data = [
   {
      "File_name": "order_18",
      "0": "order_18",
      "File_creation": "2018-11-28",
      "1": "2018-11-28",
      "File_category": "invoice",
      "3": "invoice "
   },
   {
      "File_name": "order_18",
      "0": "order_18",
      "File_creation": "2018-11-25",
      "1": "2018-11-25",
      "File_category": "order",
      "3": "order"
   }
]

var categories = {
    invoices: [],
    orders: []
}

data.map((item) => {
  if(item['File_category'] === 'order') {
    categories.orders.push(item)
  } else if(item['File_category'] === 'invoice') {
    categories.invoices.push(item)
  }
}) 

console.log(categories)

然后,您可以循环特定类别,如categories.invoices或categories.orders,并轻松地将其附加到body中。

使用PHP代码执行此操作:

<?php
//$arrays = $stmt->fetchAll();
$arrays=
[
   [
      "File_name"=>"order_18",
      "File_creation"=>"2018-11-28",
      "File_category"=>"invoice",
   ],
   [
      "File_name"=>"order_18",
      "File_creation"=>"2018-11-25",
      "File_category"=>"order",
   ]
];
foreach($arrays as $index=>$array)
{
    if(isset($array["File_category"]))
    {
        $key=$array["File_category"];
        unset($array["File_category"]);
        $arrays[$key][] = $array;
        unset($arrays[$index]);
    }
}
print_r($arrays);
//echo json_encode($arrays);
?>

使用PHP代码执行此操作:

<?php
//$arrays = $stmt->fetchAll();
$arrays=
[
   [
      "File_name"=>"order_18",
      "File_creation"=>"2018-11-28",
      "File_category"=>"invoice",
   ],
   [
      "File_name"=>"order_18",
      "File_creation"=>"2018-11-25",
      "File_category"=>"order",
   ]
];
foreach($arrays as $index=>$array)
{
    if(isset($array["File_category"]))
    {
        $key=$array["File_category"];
        unset($array["File_category"]);
        $arrays[$key][] = $array;
        unset($arrays[$index]);
    }
}
print_r($arrays);
//echo json_encode($arrays);
?>

您所要做的就是将
$arr
预处理为正确格式的新数组,然后将其发送回浏览器。不要使用fetchAll,而是一次处理一条记录的while循环。在该循环中,使用category值作为键将记录插入数组<代码>$data[$row['File\u category']]=$row(另外,您应该使用fetch mode assoc,而不是两者都使用-现在每个值都在其中两次,这可能不是您真正需要的。)您需要做的就是将
$arr
预处理为正确格式的新数组,然后将其发送回浏览器。不要使用fetchAll,而是一次处理一条记录的while循环。在该循环中,使用category值作为键将记录插入数组<代码>$data[$row['File\u category']]=$row(另外,您应该使用fetch mode assoc,而不是两者-现在每个值都在其中两次,这可能不是您真正需要的。)感谢您的回答,但我有一个错误
Uncaught TypeError:data.map不是一个函数
请看这个提琴:它是一个纯js解决方案,在控制台中显示正确的值。当然,在您的代码中,您需要有带有JSON值的数据对象。如果您正在放置简单的JSON。您需要对其执行JSON.parse()以将其传输到javascript对象。如果其中一个解决方案按预期工作,请记住单击+1并接受正确的解决方案。这将向其他人提供问题已解决且答案正确的信息。如果不存在值(例如,没有发票),如何分配值?例如,当不存在为类别['invoices'][0]['file_creation'].分配另一个值时,感谢您的回答,但我有一个错误
未捕获类型错误:data.map不是一个函数
请参见此提琴:它是一个纯js解决方案,在控制台中显示正确的值。当然,在您的代码中,您需要有带有JSON值的数据对象。如果您正在放置简单的JSON。您需要对其执行JSON.parse()以将其传输到javascript对象。如果其中一个解决方案按预期工作,请记住单击+1并接受正确的解决方案。这将向其他人提供问题已解决且答案正确的信息。如果不存在值(例如,没有发票),如何分配值?例如,当不存在为类别['invoices'][0]['file_creation'].分配另一个值时,我不理解它是如何工作的,但它是如何工作的!谢谢,我不明白它是怎么工作的,但它是工作的!非常感谢。