You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Chart.js中动态调用PHP生成的ID实现多图表

解决PHP循环中Chart.js动态访问变量的问题

你遇到的问题是因为PHP变量与JS语法混写错误,同时JS无法直接通过字符串拼接的方式访问同名变量。下面给你两种可行的解决办法:

方法一:通过window对象访问动态命名的全局变量

先让PHP把动态ID正确输出到JS代码中,再利用window对象可通过字符串键访问全局变量的特性获取对应数组。修改后的代码示例:

<?php
$sid = $source_id; // 此处$sid为32、33这类动态数字
?>

<script>    
    const fulltime_<?= $sid ?> = [1, 2, 3, 4, 5];
    const data = {
       labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
       datasets: [{
          label: 'Weekly Sales',
          data: [18, 12, 6, 9, 12, 3, 9],              
          borderWidth: 1
       }]
    };
    
    const config = {
       type: 'bar',
       data,
       options: {          
          plugins: {             
             tooltip: {
                callbacks: {
                   title: function (context) {
                      console.log(context);    
                      // 通过window对象拼接变量名访问目标数组
                      return window[`fulltime_<?= $sid ?>`][context[0].dataIndex];
                   },
                }
             }
          },
       }
    };
</script>

方法二:用对象统一存储数据(更推荐)

不要单独定义fulltime_32、fulltime_33这类零散变量,而是用一个对象统一存储所有数据,通过动态键访问,代码更整洁且不易出错:

<?php
$sid = $source_id;
?>

<script>    
    // 用对象统一存储所有fulltime数据,键对应你的动态ID
    const fulltimeData = {
        32: [1, 2, 3, 4, 5],
        33: [6, 7, 8, 9, 10],
        // 其他ID对应的数据...
    };
    
    const data = {
       labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
       datasets: [{
          label: 'Weekly Sales',
          data: [18, 12, 6, 9, 12, 3, 9],              
          borderWidth: 1
       }]
    };
    
    const config = {
       type: 'bar',
       data,
       options: {          
          plugins: {             
             tooltip: {
                callbacks: {
                   title: function (context) {
                      console.log(context);    
                      // 用PHP输出的$sid作为键访问对象中的数组
                      return fulltimeData[<?= $sid ?>][context[0].dataIndex];
                   },
                }
             }
          },
       }
    };
</script>

另外注意你原代码里的小错误:return return fulltime_32[...] 写了两个return,需要删掉一个。

内容的提问来源于stack exchange,提问作者Farz Ad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:35:17