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



昨天问了一个问题后,我了解到我需要在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

相关内容

  • 没有找到相关文章

最新更新