如何使用JSON或XML格式的PHP显示数组?

时间:2014-09-19 14:42:24

标签: php xml json

我使用PHP创建一个Web服务(API)我试图通过JSON和xml使用数组显示我的数据库表的所有记录,但它只显示一条记录,或者它只响应一条记录。 任何想法都会有用。

由于

   $query = "SELECT * FROM students";


  $result = mysqli_query($con, $query);

  while($rows = mysqli_fetch_array($result))
    {
      $fullrecord =  $rows['ID'] . " " . $rows['StudentName'] . " " .  $rows['Age'];

      $response['data'] =  $fullrecord;  
    }


   //Return Response to browser

  deliver_response($_GET['format'], $response);

2 个答案:

答案 0 :(得分:0)

对于XML,请参阅此question 对于JSON,使用关联数组:

$json = json_encode($assoc_array);

答案 1 :(得分:0)

我认为您遇到的问题不是编码/解码数组,而是实际创建数组的方式。在while循环中,您正在创建$response并将其设置为当前行。最终,这只会为您提供查询处理的最后一行(如果您知道只返回一行,那就没问题)。为避免这种情况,请声明一个空数组:$response = array();。通过正确地使$response['data']正确地进行多次调整,确保$response['data'][]不会被多次覆盖:<?php $query = "SELECT * FROM students"; $result = mysqli_query($con, $query); $response = array(); while($rows = mysqli_fetch_array($result)) { $fullrecord = $rows['ID'] . " " . $rows['StudentName'] . " " . $rows['Age']; $response['data'][] = $fullrecord; } $response = json_encode($response); deliver_response($_GET['format'], $response); ?> 。这可确保每行附加到数组,并且不会覆盖已存储的值。请尝试以下JSON功能:

$table

根据您的评论更新:

以下代码将模拟您的查询。它将使用$response这只是一个简单的数组。其中的每个项目都将模拟db表中的行。它将遍历数组中的每个项目并将其推送到名为<?php // this simulates your db table $table = array('row 1', 'row 2', 'row 3', 'row 4'); $response = array(); // this simulates your `while` loop foreach ($table as $row) { // push your value into the associative array $response['data'][] = $row; } // print_r will yield the following: // Array ( [data] => Array ( [0] => row 1 [1] => row 2 // [2] => row 3 [3] => row 4 ) ) $json_response = json_encode($response); // another print_r will yield the following: // {"data":["row 1","row 2","row 3","row 4"]} return $json_response; ?> 的新关联数组中。这与您的问题直接相关,请注意这里。一旦循环完成(所有行都被推入$ response),我们对其进行编码并返回它:

[data]

现在我们有了JSON数据,我们可以使用类似于下面的内容在另一边阅读它。首先我们将对其进行解码,获取数组<?php $response = json_decode($json_response); // pull the data: $data = $response->{'data'}; foreach ($data as $d) { echo $d . '<br />'; } ?> ,然后我们将遍历它以在屏幕上打印结果:

{{1}}