如何在 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 编码的变体?的主要内容,如果未能解决你的问题,请参考以下文章