【问题标题】:jquery json multidimensional array lengthsjquery json多维数组长度
【发布时间】:2009-11-18 21:24:09
【问题描述】:

我正在使用 jQuery ajax json 调用将 3 维 PHP 数组检索到 Javascript 中。 PHP 数组如下所示:

$rate[0][1]['name'] = 'guff'; $rate[0][1]['value'] = 'puff'; $rate[0][2]['name'] = 'guff'; $rate[0][2]['value'] = 'puff'; $rate[0][3]['name'] = 'guff'; $rate[0][3]['value'] = 'puff'; $rate[1][1]['name'] = 'guff'; $rate[1][1]['value'] = 'puff'; $rate[1][2]['name'] = 'guff'; $rate[1][2]['value'] = 'puff';

我正在尝试查找子数组的长度,例如rate[1].length 当我从 jquery ajax 调用中得到这个时:

$.ajax({ 类型:'发布', url: 'ajax_load_rates.php', 数据:'trip_type='+$('#trip_type').val(), 数据类型:“json”, 成功:函数(数据){ 费率 = 数据; }});

jQuery 似乎转换了外部数组,所以rates.length 给了我一个值。但不转换子数组,所以rates[9].length是未定义的

我试过循环遍历数组来手动转换它:

$(rate).each(function(i) { rate[i] = jQuery.makeArray($(this)); console.log(rates[i].length); });

但是当我知道有负载时,我得到的值为 1。

这里是 json 字符串的示例:

[{"1":{"name":"单程基地加载","value":"10","default":"0"},"2":{"name":"多程基地loading","value":"50","default":"0"}},{"1":{"name":"City break","value":"70","default":"0 "},"2":{"name":"太阳和沙子","value":"75","default":"0"},"3":{"name":"Backpacker","value ":"90","default":"0"},"4":{"name":"骑马","value":"120","default":"0"},"5": {"name":"Safari","value":"80","default":"0"},"6":{"name":"Golf","value":"85","default" :"0"},"7":{"name":"冲浪和航行","value":"140","default":"0"},"8":{"name":"Road runner ","value":"130","default":"0"},"9":{"name":"Flotilla","value":"150","default":"0"}," 10":{"name":"离岸水手","value":"200","default":"0"},"11":{"name":"风筝冲浪者","value":"300 ","默认":"0"}}]

任何想法,帮助都会很棒。我对 json/ajax/jQuery 很陌生。你也许能从我的代码中看出。

干杯,

抢劫。

【问题讨论】:

  • 请将您的代码放入
    -Tags。
  • json 长什么样子?
  • 可能是您的问题出在 PHP 端?你能告诉我们ajax_load_rates.php 发送回 javascript 的 JSON 字符串是什么吗?
  • 从 db 调用创建数组后,我会 echo json_encode($rates);
  • 我已将部分 json 字符串添加到问题中......太长了,无法发表评论

标签: jquery arrays json


【解决方案1】:

在 PHP 中,如果您不以索引为 0 的数组开始,它会被视为关联数组。然后,当您使用 json_encode 方法时,它会变成 JSON 中的 Object。

您可以对您的代码进行许多优化,但由于您只是将其作为示例,我假设您的真实代码还有很多事情要做。

这与您提供的代码相同,只是第二层元素上的索引现在从零开始,而不是从一开始

$rate[0][0]['name'] = 'guff';
$rate[0][0]['value'] = 'puff';
$rate[0][1]['name'] = 'guff';
$rate[0][1]['value'] = 'puff';
$rate[0][2]['name'] = 'guff';
$rate[0][2]['value'] = 'puff';
$rate[1][0]['name'] = 'guff';
$rate[1][0]['value'] = 'puff';
$rate[1][1]['name'] = 'guff';
$rate[1][1]['value'] = 'puff';

通过json_encode 传递它会产生这样的结果:

[[{"name":"guff","value":"puff"},{"name":"guff","value":"puff"},{"name":"guff","value":"puff"}],[{"name":"guff","value":"puff"},{"name":"guff","value":"puff"}]]

您可以在其中看到二级元素仍然是 JSON 中的数组 ([]) 而不是对象 ({})。

【讨论】:

  • 我所说的优化之一是像 $rate[] = $second_array 甚至 $rate[0][] = array('name' => 'guff', 'value' => 'puff') 这样推送到数组,并避免直接设置大部分索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 2011-08-08
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2013-05-17
相关资源
最近更新 更多