【问题标题】:Splicing an element in the middle of an associative array在关联数组的中间拼接一个元素
【发布时间】:2012-04-10 04:11:15
【问题描述】:

我想将元素添加到我这样访问的对象内的数组中以检索数据。

var event_id = events_data.event_id[i]["0"];
var event_title = events_data.event_title[i]["0"];
var selected_source = events_data.selected_source[i]["0"];
var channel_id = events_data.channel_id[i]["0"];

events_data 是一个包含 event_id、event_title 等元素的对象。该对象是在这样的 php 函数中创建的。

$return = array();
$return['event_id'] = $event_id; 
$return['event_title'] = $event_title;
$return['selected_source'] = $selected_source;
$return['channel_id'] = $channel_id;
$return['channel_name'] = $channel_name;
$return['event_site'] = $event_site;
$return['event_url'] = $event_url;
$return['start_date'] = $start_date;
$return['start_time'] = $start_time;
$return['end_date'] = $end_date;
$return['end_time'] = $end_time;
$return['event_notes'] = $event_notes;

echo json_encode($return);

编辑 - 添加信息

json 对象如下所示。

{"event_id":[{"0":"e20120319215556"},{"0":"e20120310221512"},{"0":"e20120319151903"},{"0":"e20120309123705"},{ "0":"e20120307122044"},{"0":"e20120306182514"},{"0":"e20120309211714"},{"0":"e20120314130727"},{"0":"e20120319150532"},{ "0":"e20120319141928"},{"0":"e20120319141201"},{"0":"e20120301193226"},{"0":"e20120301184354"}]}

已添加结束信息

在 javascript 方面,我得到了这样的 events_data 数组。

$.ajax({
    url: "get_events_data.php",
    type: "POST",
    dataType : 'json',
    data: { },
    cache: false,
    async: false,
    success: function (rdata) {
        events_data = rdata;
                  }
         });

为了在 javascript 端向 events_data 添加一个元素,我检查添加新元素的索引,然后使用拼接添加它。但是由于数据是用关联数组的["0"]文本键检索的,所以我不知道如何指定拼接参数。

for ( var n=0; n<events_data.event_id.length; n++ ) { 
   if ( current_event_id == events_data.event_id[n]["0"] ) {
       //splice_index = n;              
       events_data.event_id.splice(n,0,event_id);
       events_data.event_title.splice(n,0,event_title);
       events_data.selected_source.splice(n,0,selected_source);
       events_data.channel_id.splice(n,0,channel_id);
       events_data.channel_name.splice(n,0,channel_text);
       events_data.event_site.splice(n,0,event_site);
       events_data.event_url.splice(n,0,event_url);
       events_data.start_date.splice(n,0,start_date_string);
       events_data.start_time.splice(n,0,start_time_string);
       events_data.end_date.splice(n,0,end_date_string);
       events_data.end_time.splice(n,0,end_time_string);
       events_data.event_notes.splice(n,0,event_notes);
       break;
    }
}

指定拼接索引“n”似乎没有这样做。我应该改变什么?

谢谢。

【问题讨论】:

  • 看起来您将数组与对象混合在一起,反之亦然。简而言之,如果您想要一个具有保证顺序的数字索引数据结构,请使用数组。如果您想要一个以字符串作为键(而不是数字)的关联数组,请使用对象。如果你最终使用数组,你可以使用 push、pop 等来添加和删除项目。
  • 该数组是从 php 函数返回的 json 编码对象。它工作正常。我只想知道如何在其中添加一个元素。如果我从 events_data 对象中读取这样的 event_title 数组,var event_title = events_data.event_title[i]["0"];,我如何在其中添加一个元素?
  • 显示 JSON 比显示 PHP 更有帮助。
  • 对原始问题进行了编辑以添加如下所示的 json 对象:{"event_id":[{"0":"e20120319215556"},{"0":"e20120310221512"},{"0":"e20120319151903"},{"0":"e20120309123705"},{"0":"e20120307122044"},{"0":"e20120306182514"},{"0":"e20120309211714"},{"0":"e20120314130727"},{"0":"e20120319150532"},{"0":"e20120319141928"},{"0":"e20120319141201"},{"0":"e20120301193226"},{"0":"e20120301184354"}]}

标签: php javascript arrays associative-array splice


【解决方案1】:

答案很简单:

Adding an object to an array of objects with splice

var add_object = {"0",event_id}; // declare event id as object
events_data.event_id.splice(n,0,add_object); // splice object into object array at index

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2023-01-23
    • 2011-09-02
    • 2015-02-22
    • 2011-12-31
    • 2012-06-06
    • 2014-03-20
    • 2012-11-05
    相关资源
    最近更新 更多