【问题标题】:Uncaught Error: Not a valid 2D array未捕获的错误:不是有效的二维数组
【发布时间】:2013-11-07 16:36:34
【问题描述】:

我正在通过 Ajax 调用创建一个多维数组以填充 Google 图表(列)。然而,返回的数组导致了这个错误:

Uncaught Error: Not a valid 2D array.  

这是生成要发送回的数组的代码:

$chartData = array();

    $i = 0;
    foreach ($hourVal as $value) {

        if($i <= 9){
           $chartData[] = array(
               "0" . $i => (int) $value
            );
        } else {
            $chartData[] = array(
                $i => (int) $value
            );
        }
        $i++;
    }

这是我 console.log 时的数组:

[
 [
  "Terms",
  "Visits"
 ],
 {
  00: 88
 },
 {
  01: 30
 },
 {
  02: 44
 },
 {
  03: 20
 }
]

编辑:我在数组的开头添加一行,还有 json_encode:

array_unshift($chartData, array("Terms","Visits"));
echo json_encode($chartData);

任何想法发生了什么以及如何解决这个问题?

【问题讨论】:

  • 你要json_decode
  • 抱歉,是的。忘记补充了。现在会。
  • 你为什么要"0" . $i
  • 因为我需要键是'01'、'02'、'03'等。
  • @MarkP:为什么?为什么需要这样的钥匙?这就是这里的问题。如果您将键设为0102 等,那么json_encode 会创建一个对象(因为它们不是数字键),从而使“不是有效的二维数组”。

标签: javascript php arrays


【解决方案1】:

这不是二维数组。它是一组对象(和一个数组)。当您执行json_encode 时,只有当您的PHP 数组是一个数字数组(索引从0 开始)时,您才会得到一个数组。否则你会得到一个对象(因为 JavaScript/JSON 没有“关联数组”)。

您需要确保您的数组是数字的,并且从 0 开始索引。

$chartData = array();

$i = 0;
foreach ($hourVal as $value) {
    $chartData[] = array(
        $i => (int) $value
    );
    $i++;
}

我不知道您为什么要这样做 "0" . $i,但这就是导致您的问题的原因。那是创建一个“关联数组”,它编码为一个对象。

【讨论】:

    【解决方案2】:

    我已经解决了,因为我用前缀 0 发送它们,然后它使它们成为数组的索引。不得不剪掉那一点并作为字符串发送。不需要,但可以修复:(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 2016-08-09
      • 1970-01-01
      相关资源
      最近更新 更多