使用php mysql中的章节标题按字母顺序获取名称数据

时间:2017-12-06 06:08:27

标签: php mysql

我有一个像下面这样的表,试图获取JSON格式的2D数据但没有成功。我尝试了不同的方法,但无法实现。请指导我获得结果。

***忘记上传代码,这是我的试用代码的更新问题。

id   company_name 
-----------------
1    Alexa          
2    Cisco          
3    Blackberry     
4    Amazon         
5    Deka           
6    Colgate        
7    Dell           
8    BBC 

我希望在2D JSON格式数组中获得如下数据。

[
    {
      id: 1,
      heading: 'A',
      data: [
        {id: 4, text: 'Amazon'},
        {id: 1, text: 'Alexa'},
      ]
    },
    {
      id: 2,
      heading: 'B',
      data: [
        {id: 8, text: 'BBC'},
        {id: 3, text: 'Blackberry'},
      ]
    },
    {
        id: 3,
        heading: 'C',
        data: [
          {id: 2, text: 'Cisco'},
          {id: 6, text: 'Colgate'},
        ]
    },
    {
        id: 4,
        heading: 'D',
        data: [
          {id: 5, text: 'Deka'},
          {id: 7, text: 'Dell'},
        ]
    }
]

我正在尝试使用以下代码,但尚未成功。我还在努力,如果有人提出帮助,我将非常感激。

$query = mysqli_query($dblink,"SELECT id,company_name FROM company_names ORDER BY company_name");

$data = array();
while($row = mysqli_fetch_assoc($query)) {
  $id = $row["id"];
  $letter = strtolower(substr($row["company_name"],0,1));
  if(is_numeric($letter)) $letter = "0-9";
  if(!isset($data[$letter])){
  $data[$letter] = array();}
  $data[$letter][] = $row["company_name"];
}

echo json_encode($data);

1 个答案:

答案 0 :(得分:3)

实际上,我只在代码中添加了为结果数组设置的其他列。

$data = array();
$id = 1;
while($row = mysqli_fetch_assoc($query)) {
  $letter = strtoupper($row["company_name"]{0});
  if(is_numeric($letter)) $letter = "0-9";
  if(!isset($data[$letter])) {
     $data[$letter]['heading'] = $letter;
     $data[$letter]['id'] = $id++;
  }
  $data[$letter]['data'][] = $row;
}

echo json_encode($data);

demo