如何在 javascript 中访问多维 PHP 数组作为 json 编码的变体?

Posted

技术标签:

【中文标题】如何在 javascript 中访问多维 PHP 数组作为 json 编码的变体?【英文标题】:How to access a multi Dimensional PHP Array in javascript as json-encoded variant? 【发布时间】:2011-09-24 06:02:31 【问题描述】:

昨天问了一个问题后,我了解到我需要在 php 中有一个数组并使用 JSON 将其传递给 javascript。我已经完成了所有工作,但我需要向我的数组添加一个维度,但不确定如何。

当前数组是:

$result = array(
  'NumberSelected' => $number,
  'TargetPerc'     => array (),
  'KpiDescription' => array (),
  'KpiName'        => array (),
  'ValuetoPrint'   => array (),
  'ValueNow'       => array (),
  'ValueCompare'   => array (),
  'Target'         => array (),
  'KpiUnits'       => array ()
);

但我现在需要将其包含在另一个维度中以按组对它们进行排序。

这是我尝试过的:

$result = array(
  $i => array(
    'NumberSelected' => $number,
    'TargetPerc'     => array (),
    'KpiDescription' => array (),
    'KpiName'        => array (),
    'ValuetoPrint'   => array (),
    'ValueNow'       => array (),
    'ValueCompare'   => array (),
    'Target'         => array (),
    'KpiUnits'       => array ()
  )
);

$i 之前两行定义为 0。但它似乎无法识别出外部数组。可能与我的收集代码有关,目前是result.KpiName[i](JSON 变量作为result 传递给这个javascript 函数)。我试过result.i[KpiName[i]] 没有成功。

任何帮助将不胜感激。

【问题讨论】:

哇。即使代码突出显示,也很难阅读。 抱歉,直接从文件中复制出来了,不过现在看起来好多了。 【参考方案1】:

如果你只有一个结果:

$result = array(
    'NumberSelected' => $number,
    'TargetPerc' => array(),
    ....
);

然后你想将它与其他一些结果一起添加:

$result_set = array();
$result_set[] = $result;

此时,$result_set 是一个有一个元素的数组,一个包含键 'NumberSelected''TargetPerc' 等的数组。

我认为您对在数组中包含数组的想法感到困惑,所以可以这样想:每个数组索引都是指向特定数据的“路径”的一个组成部分,就像在文件系统中一样.在这种情况下,$result_set 是“路径”中最通用的部分,就像 Windows 上的驱动器号。在我们的虚拟驱动器中有一堆以数字命名的文件夹,所以$result_set[0] 是第一个文件夹,$result_set[1] 是第二个文件夹。在每个文件夹中都有名为 NumberSelected 的子文件夹(实际上它就像一个文件,因为它有一个标量值)、TargetPerc 等,它们对应于结果集的第二层:@987654331 @。现在,数组的最终维度对应于 'TargetPerc''KpiDescription' 等每个文件中的各个文件,其中文件,除非您给它们命名键,否则用数字命名。

因此,要访问结果集中第一个结果中'KpiDescription' 的第一项,您的文件系统“路径”(保持类比)将是

result_set/0/KpiDescription/0

现在,将其翻译回 PHP:

$result_set[0]['KpiDescription'][0]

简单吧?

现在是你问题的 JSON 部分:一旦你 json_encode 它,它看起来就像是 PHP 的一大串文本,但 json_encode 的神奇之处在于它保持了原始数据结构,但是在 Javascript 中。

所以你的结果集应该是这样的:

result_set = [
    
        NumberSelected: 123,
        TargetPerc: [ ... ],
        KpiDescription: [ ... ]
    
];

如您所见,Javascript 只是一个对象数组,其中每个对象都有一些恰好是数组的属性。要访问第一个 KpiDescription 中的第一个项目(就像上面一样),您可以使用:

result_set[0].KpiDescription[0]

另外,因为 Javascript 允许您将对象属性视为数组索引(实际上这不是完全正确,但这是另一回事),您可以这样做:

result_set[0]['KpiDescription'][0]

看起来很眼熟? PHP 中缺少的只是领先的$

我希望这有助于为您解决一些问题。

【讨论】:

感谢您深思熟虑的答案。让它正确通过,所以现在可以构建它的其余部分。谢谢。【参考方案2】:

$i 不用设置,$arr = array(array(array())); 即可初始化 3D 数组。

您的代码应该可以使用 result[i]['KpiName'][i]

/编辑:添加引号。用上面的语法对其进行了测试,应该可以工作。 测试:

$(document).ready(function()
    var arr = new Array();
    arr[0] = new Array();
    arr[0]['test'] = new Array();
    arr[0]['test'][1] = 5;

    alert(arr[0]['test'][1]);
);

按预期返回 5

【讨论】:

谢谢,但我需要用 javascript 收集结果。数组使用 onClick 函数作为 JSON 变量传递给 javascript 函数,我需要在那里输出值。 你不是用 eval() 解码 JSON 吗?如果没有,那么试试 result.i.KpiName.j ? 将 JSON 传递给一个 javascript 变量,而不是在任何阶段对其进行解码,所以之前我使用的是 result.KpiName[i],它在额外维度之前工作得很好。 这不是在KpiName 周围漏掉引号吗?【参考方案3】:

实际采集代码为:-

$result[i][KpiName][j]

其中“i”和“j”是上述数组的索引。

希望对你有帮助。

【讨论】:

那不是错过了KpiName 周围的引用吗? 我正在收集 Javascript。该数组使用json_encode($result) 作为变量传递,我正在尝试用javascript 输出。最初我使用result.KpiName[i] 输出并且它工作正常,但不确定是否有额外的维度。【参考方案4】:
$result = array(
  'NumberSelected' => $number,
  'TargetPerc'     => array (),
  'KpiDescription' => array (),
  'KpiName'        => array (),
  'ValuetoPrint'   => array (),
  'ValueNow'       => array (),
  'ValueCompare'   => array (),
  'Target'         => array (),
  'KpiUnits'       => array ()
);

$newArray[0] = $result;

是我能想到的最简单的答案,除非我遗漏了什么。

【讨论】:

以上是关于如何在 javascript 中访问多维 PHP 数组作为 json 编码的变体?的主要内容,如果未能解决你的问题,请参考以下文章

如何循环访问和访问多维和关联数组中的各种元素? PHP,JSON 或 XML

数组多维javascript

如何通过键名/路径访问和操作多维数组?

在PHP中访问多维OBJECT中的值的正确方法是什么

Ajax以JSON访问从PHP返回的多维数组

javascript 访问带索引的多维数组