php - 从我的 pdo 调用创建正确的数据结构

标签 php mysql pdo

我正在尝试从 MySQL 数据库中获取程序和类别。我可以获得程序,也可以获得类别。我正在努力创建一个数组或其他数据结构,其中 json_encode 会给我这样的东西:

{ 'CA' : [ 类别 1, 类别2 ] };

使用我现在的代码,回显我的 programsAr (json_encoded) 我明白了

programsAr: [{"CA":[]},{"SNAP":[]}]

这几乎就是我想要的,只是我希望“CA”和“SNAP”成为同一对象中的键,而不是不同的对象。我是 PHP 的新手,因此我不确定如何实现这一目标。如果我可以在同一个对象中获取这两个键,我可以轻松地遍历类别并按键添加它们。

这是我的代码

  $stmt2 = $pdo->prepare("select id, name from TRACKER_PROGRAM where tracker = ?");
  $stmt2->execute(array($tracker));
  $combinedPrograms = array();
  $ids = array();
  $programsAr = array();
  while ($programs = $stmt2->fetch(PDO::FETCH_ASSOC)) {
    array_push($combinedPrograms, array('id'=>$programs['id'],'name'=>$programs['name']));
    array_push($ids, $programs['id']);
    $arr = array();
    array_push($programsAr,array($programs['name']=>$arr));
  }
  echo 'programsAr: ' . json_encode($programsAr); 
  $stmt3 = $pdo->prepare("select TRACKER_PROGRAM.name as Program, PROGRAM_CATEGORY.name, PROGRAM_CATEGORY.ID from TRACKER_PROGRAM, PROGRAM_CATEGORY where program in (" .implode(',',$ids) . ") and TRACKER_PROGRAM.id = PROGRAM_CATEGORY.program order by program");
  $stmt3->execute();
  $topics = $stmt3->fetchAll(PDO::FETCH_ASSOC);

最佳答案

您在未指定键的情况下推送数组,因此它将被视为新对象而不是键 => 值

使用不同的语法尝试这段代码应该能满足您的需求。

  $stmt2 = $pdo->prepare("select id, name from TRACKER_PROGRAM where tracker = ?");
  $stmt2->execute(array($tracker));
  $combinedPrograms = array();
  $ids = array();
  $programsAr = array();
  while ($programs = $stmt2->fetch(PDO::FETCH_ASSOC)) {
    $combinedPrograms[] = array('id'=>$programs['id'],'name'=>$programs['name']);
    $ids[] = $programs['id'];
    $arr = array();
    $programsAr[$programs['name']] = $arr;
  }
  echo 'programsAr: ' . json_encode($programsAr); 
  $stmt3 = $pdo->prepare("select TRACKER_PROGRAM.name as Program, PROGRAM_CATEGORY.name, PROGRAM_CATEGORY.ID from TRACKER_PROGRAM, PROGRAM_CATEGORY where program in (" .implode(',',$ids) . ") and TRACKER_PROGRAM.id = PROGRAM_CATEGORY.program order by program");
  $stmt3->execute();
  $topics = $stmt3->fetchAll(PDO::FETCH_ASSOC);

关于php - 从我的 pdo 调用创建正确的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965282/

相关文章:

php - php/mysql 查询的计数和求和

php - pdoException不输出错误

php - 处理共享主机上的 MySql 'Too many connections' 错误

php - 如何在 PHP 文件中使用 PHPStorm 中的 Emmet?

PHP 显示由 3 个 CSS 列中的两个串联变量组成的 mysql 查询结果

php - 有没有办法为 YouTube 播放列表中的每个视频生成单独的 YouTube 嵌入?

PHP MySQL 搜索引擎多输入

php - 如何在 Laravel 5.2 注册期间为每个新用户将文本写入一个数据库列?

php - 使用 php for 循环动态输入名称

PHPUnit - 如何模拟 PDO 准备好的语句