昨天问了一个问题后,我了解到我需要在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]]
,但没有成功。
如有任何帮助,我们将不胜感激。
如果只有一个结果:
$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
等的子文件夹,它们对应于结果集的第二层:$result_set[0]['NumberSelected']
。现在,数组的最后一个维度对应于'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缺少的只是领先的$
。
我希望这能帮你澄清一些事情。
$result = array(
'NumberSelected' => $number,
'TargetPerc' => array (),
'KpiDescription' => array (),
'KpiName' => array (),
'ValuetoPrint' => array (),
'ValueNow' => array (),
'ValueCompare' => array (),
'Target' => array (),
'KpiUnits' => array ()
);
$newArray[0] = $result;
是我能想到的最简单的答案,除非我遗漏了什么。
实际采集代码为:-
$result[i][KpiName][j]
其中"i
"&"j
"是上述数组的索引。
希望能有所帮助。
您不需要设置$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