取消设置数组中的项目破坏了循环数据的逻辑

2023-12-07

我的控制器中有以下逻辑:

public function showvlans()
{
    $vlans=$this->switches_model->show_known_vlans($this->uri->segment(5), $this->uri->segment(4));
    //filter out VLAN 1 if its included in the list. 
    $key = array_search('1', $vlans);
    unset($vlans[$key]);
    header ('Content-Type: application/json; charset=UTF-8');
    echo json_encode($vlans);  

} // end showvlans  

由于某种原因,在我从数组中过滤掉一条记录后,循环 json 数据的逻辑不再起作用。

循环 json 数据的逻辑如下:

alert(returnDataFromController.length);
//loop through results
for(i = 0; i < returnDataFromController.length; i++) {
    alert(returnDataFromController[i].VlanId);
    htmlstring = htmlstring +  "<tr><td><a href=>"+returnDataFromController[i].VlanId+"</a></td><td>"+ returnDataFromController[i].Name+"</td></tr>";                         
}

Clues:

警报显示“未定义”。
我还转储了从数组中删除记录之前和之后的数据,json 数据如下所示:

删除记录之前:

[09:36:52.986] [
    {VlanId:"1", Name:"VLAN1", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"3", Name:"VLAN3", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"8", Name:"VLAN8", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"16", Name:"VLAN16", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"20", Name:"VLAN20", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"33", Name:"VLAN33", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"64", Name:"VLAN64", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"65", Name:"VLAN65", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"66", Name:"VLAN66", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"80", Name:"VLAN80", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"96", Name:"VLAN96", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"101", Name:"VLAN101", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"128", Name:"VLAN128", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"131", Name:"VLAN131", Status:"Port-based", Voice:"No", Jumbo:"No"},
    {VlanId:"417", Name:"VLAN417", Status:"Port-based", Voice:"No", Jumbo:"No"}]

AFTER:

[09:34:41.797] (
    {1:{VlanId:"3", Name:"VLAN3", Status:"Port-based", Voice:"No", Jumbo:"No"},
     2:{VlanId:"8", Name:"VLAN8", Status:"Port-based", Voice:"No", Jumbo:"No"},
     3:{VlanId:"16", Name:"VLAN16", Status:"Port-based", Voice:"No", Jumbo:"No"},
     4:{VlanId:"20", Name:"VLAN20", Status:"Port-based", Voice:"No", Jumbo:"No"},
     5:{VlanId:"33", Name:"VLAN33", Status:"Port-based", Voice:"No", Jumbo:"No"},
     6:{VlanId:"64", Name:"VLAN64", Status:"Port-based", Voice:"No", Jumbo:"No"},
     7:{VlanId:"65", Name:"VLAN65", Status:"Port-based", Voice:"No", Jumbo:"No"},
     8:{VlanId:"66", Name:"VLAN66", Status:"Port-based", Voice:"No", Jumbo:"No"},
     9:{VlanId:"80", Name:"VLAN80", Status:"Port-based", Voice:"No", Jumbo:"No"},
     10:{VlanId:"96", Name:"VLAN96", Status:"Port-based", Voice:"No", Jumbo:"No"},
     11:{VlanId:"101", Name:"VLAN101", Status:"Port-based", Voice:"No", Jumbo:"No"},
     12:{VlanId:"128", Name:"VLAN128", Status:"Port-based", Voice:"No", Jumbo:"No"},
     13:{VlanId:"131", Name:"VLAN131", Status:"Port-based", Voice:"No", Jumbo:"No"},
     14:{VlanId:"417", Name:"VLAN417", Status:"Port-based", Voice:"No", Jumbo:"No"}})

正如您所看到的,它看起来确实略有不同。我有一个空缺[在我使用 unset 之前,而在我使用之后(。 我试图改变我的循环控制,以便变量i开始于1相反...但这也不起作用。

例如,我尝试了以下操作:

for(i = 1; i < returnDataFromController.length; i++) {

代替

for(i = 0; i < returnDataFromController.length; i++) {

假设您的数组以 5 个项目开始。当所有 5 项都存在时,数组键为:0、1、2、3、4

json_encode正确地将其检测为枚举数组,并将其转换为 JSON 数组。

但是,假设您删除了索引 2 处的项目。现在,您有:0、1、3、4。json_encode看到键的非顺序编号,现在假设它是一个关联数组,因此您将返回一个键为 0、1、3、4 的 JSON 对象。JSON/Javascript 中的对象没有length,所以你的代码不再有效。

诀窍是使用array_values在将其传递给之前json_encode,如果您想将其枚举为数组。

或者,您可以更改您的for在 JavaScript 中循环:

for (var i in returnDataFromController) {
    if (returnDataFromController.hasOwnProperty(i)) {
        /* your code here */
    }
}

尽管强烈建议通过以下方式将其转换为数组array_values

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

取消设置数组中的项目破坏了循环数据的逻辑 的相关文章

随机推荐

  • Flexbox/浮动 - 2 1 2 布局

    我正在尝试使用 Flexbox 或浮动创建 2 1 2 布局 如添加到此问题的图像中所示 有没有什么方法可以仅使用有序的项目列表成功地做到这一点 ul li 1 li li 2 li li 3 li li 4 li li 5 li ul 1
  • 将结构体数组从 C# 传递到 Delphi

    我正在使用罗伯特 吉塞克非托管导出 1 2 6 in VS2010我的目标是传递一个结构数组时间 2019 03 17 标签 c NET 3 5 to 德尔福 D7 我必须承认 我对delphi不太熟悉 我已经读过这个帖子 但建议的答案对我
  • 如何找到 Postgres 中所有表的行数

    我正在寻找一种方法来查找 Postgres 中所有表的行数 我知道我可以一次做一张桌子 SELECT count FROM table name 但我想查看所有表的行数 然后按其排序以了解我的所有表有多大 有三种方法可以得到这种计数 每种方
  • UrlConnection 无内容类型

    我目前正在 Eclipse 上使用 Java 7 Maven Spring MVC 和 Eclipselink JPA 编写一个 Web 服务 以访问连接到内部网络的温度 湿度传感器的值 我使用curl 连接到传感器并检索值没有问题 但是当
  • Express 和 ejs <%= 渲染 JSON

    在我的 index ejs 中 我有以下代码 var current user 在我的节点中我有 app get function req res res locals user req user res render index 但是 在
  • iPhone Retina 模拟器的屏幕分辨率错误

    我正在尝试编写一个通用应用程序 对于不同的屏幕分辨率 显示应该略有不同 但是当我这样编码时 void viewDidLoad SCREEN WIDTH UIScreen mainScreen applicationFrame size wi
  • 如何创建继承自Release的CMake配置类型

    这个答案描述如何从头开始创建自定义配置类型 如何制作与内置完全匹配的配置类型Release 只添加一些标志 我现在正在使用这个 set CMAKE CONFIGURATION TYPES Debug Release ReleaseWithA
  • Greendroid 或 ActionbarSherlock - 设置

    你们知道有关如何在 Windows 上的 Eclipse 中使用上述框架之一的教程吗 我已经下载了它们并按照说明进行操作 但在这两种情况下我仍然遇到错误 挫败感 我刚刚在 ActionBarSherlock 上尝试了这些说明 但我很确定当我
  • Python:替换嵌套字典中的值

    我想用与以下相同的值替换值 格式为字符串 integers 每当关键是 当前值 d id 10 datastreams current value 5 current value 4 期望的输出 d id 10 datastreams cu
  • 如何在Python中重定向stderr?通过Python C API?

    这是我最近提出的两个问题的组合 1 C 中的 Python 实例方法 2 如何在Python中重定向stderr 我想从 python 脚本记录 stdout 和 stderr 的输出 我想问的是 根据 1 创建一个新类型似乎相当复杂 如果
  • href 表达式 的作用是什么?

    我时常在网页中看到以下href 但是 我不明白这是要做什么或技术 有人可以详细说明一下吗 a href a An a 元素是无效的 HTML 除非它有href or name属性 如果您希望它正确呈现为链接 即下划线 手形指针等 那么只有当
  • 当模型具有 clean 方法时,如果模型表单排除了某些字段,如何处理模型表单的验证?

    我有这个模型 class IeltsExam Model student OneToOneField Student on delete CASCADE has taken exam BooleanField default False l
  • 在加载之前操作 WebKit CSS 数据?

    是否可以在 WebKit 解析 CSS 数据之前对其进行操作 我尝试过使用委托方法 NSURLRequest webView WebView sender resource id identifier willSendRequest NSU
  • 如何获取Hive编译器生成的MapReduce Jobs源码?

    我想知道SQL编译器生成的代码是什么Hive 即 如果我执行一个 sql 语句 我希望看到由 SQL hive 编译器生成的 MapReduce 作业的代码 我怎么才能得到它 对于 Hive 它将物理计划序列化为 xml 文件 第 15 页
  • 如何从实例字段按名称渲染组件/助手?

    有没有办法使用控制器 视图字段中的组件 所以不要使用 contact select label Label contacts form prop or input field label Label contacts form prop o
  • 重新增长运算符 new() 分配的内存?

    是否可以重新增长分配的内存operator new 当这样分配时 char buf new char 60 The C FAQ指出分配的内存new无法通过 realloc 调整大小 那么重新增长分配的内存的正确方法是什么new 正确的做法是
  • C# 对象初始值设定项:从另一个对象设置属性

    我有以下对象 在构造函数中添加一个新的 Guid 作为 Id public class MyObject public MyObject Id Guid NewGuid ToString public String Id get set p
  • Firebase 云功能:“状态”:“INVALID_ARGUMENT”

    我正在本地测试 Firebase 云功能 当我使用本地 URL 调用此函数时http localhost 5001 projectName us central1 functionName如上所述here exports createSes
  • 如何在 Firebase 实时数据库上进行地理医疗查询?

    我的 MySQL 数据库中存储了一个坐标 并且在 Firebase 实时数据库中更新了其他多个坐标 如何从 Firebase 实时数据库找到附近的坐标 Firebase 实时数据库是否允许 GEO 查询 我的实时数据库结构如下 如何从 Fi
  • 取消设置数组中的项目破坏了循环数据的逻辑

    我的控制器中有以下逻辑 public function showvlans vlans this gt switches model gt show known vlans this gt uri gt segment 5 this gt