我正在尝试从 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/