首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从stdclass数组中移除stdclass对象的元素。

从stdclass数组中移除stdclass对象的元素。
EN

Stack Overflow用户
提问于 2015-11-03 18:23:14
回答 3查看 10.1K关注 0票数 2

标题可能有点混乱,因为我不太清楚如何描述我的“数组”。下面是我使用print_r时的样子.

代码语言:javascript
复制
stdClass Object
(
[0] => stdClass Object
    (
        [Name] => Claude Bemrose
        [Skill] => 7
        [Age] => 14
        [AgeWeeks] => 11
        [ChanceOfLeaving] => 12
    )

[1] => stdClass Object
    (
        [Name] => Willy Gearon
        [Skill] => 7
        [Age] => 12
        [AgeWeeks] => 27
        [ChanceOfLeaving] => 8
    )

[2] => stdClass Object
    (
        [Name] => Kevin Broderick
        [Skill] => 9
        [Age] => 13
        [AgeWeeks] => 21
        [ChanceOfLeaving] => 12
    )

它看起来有点像一个有一个对象数组的对象。

我想删除一个元素(例如整个[1]),但是如果我尝试使用unset,例如unset($this->U16sArray[$arrayindex]),我会得到.

致命错误:不能使用stdClass类型的对象作为数组。

我仍然非常困惑,我的‘数组’是如何或为什么在第一次出现这种方式。但我很高兴这样使用它,只要我能去掉元素。

按要求提供更多的信息。它是使用PDO从数据库中获取的。

代码语言:javascript
复制
    try {
        $query = $db->prepare("SELECT * FROM Teams WHERE ID = :TeamID");
        $query->bindValue(':TeamID', $ID, PDO::PARAM_INT);
        $query->setFetchMode(PDO::FETCH_INTO, $this);
        $query->execute();
        $query->fetch();    
    }

它是一个更大物体的一部分。

然后从JSON中解码

代码语言:javascript
复制
$this->U16sArray = json_decode($this->U16sJSON);

编辑-更新。

我正在慢慢地追踪这个问题。基本上,这一切都很好,直到我使用unset函数,此时,一些东西被修改,保存,然后当我重新加载它,它开始抛出错误。想必它已经从一种类型的数组变成了另一种或者别的什么。

例如,在对数据使用unset函数之前,数据库中的数据如下所示.

[{“名称”:“詹姆斯·苏特”,“技能”:2,“年龄”:15,"AgeWeeks":19,"ChanceOfLeaving":8},{“名称”:“Neil”,“技能”:8,“年龄”:15,"AgeWeeks":11,"ChanceOfLeaving":3}

当我执行一个U16sArray ->数组时,它显示为print_r。

在数据中的某个位置使用了unset并再次保存之后,数据现在看起来如下所示。

{“0”:{“名称”:“James”,“技能”:2,“年龄”:15,"AgeWeeks":20,"ChanceOfLeaving":9},"1":{"Name":"Neil“,”技能“:8,”年龄“:15,"AgeWeeks":12,"ChanceOfLeaving":4}

所以“0”和“1”被添加了。现在,我的代码在许多地方都错了,现在一个print_r将它显示为U16sArray -> stdClass对象。

解决方案(我认为)-大约1/4的PHP:json_encode页面,我认为是答案,回答是‘西蒙丘在这里’。显然,“取消设置元素也会移除键。json_encode()现在将假定这是一个对象,并将其编码为such.‘。”

http://php.net/manual/en/function.json-encode.php

因此,它看起来工作得很好,未设置就将它更改为一个对象,然后当我下一次加载它时,它就不再充当数组了。

解决方案是在编码/保存之前使用array_values重新索引数组。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-03 18:45:32

恐怕这只是你不能做的事情之一。这与PHP用于处理此类情况的方式有关(而不是)。基本上,您不能使用数字变量名访问对象属性。

这个类似问题的答案会更好地解释:https://stackoverflow.com/a/10333200/1012699

但是,可以将对象转换为数组并访问/删除其内容。如果你想要的话,就把它扔回一个物体里。参见php:http://php.net/manual/en/language.types.type-juggling.php中的类型转换手册

票数 0
EN

Stack Overflow用户

发布于 2015-11-03 18:24:59

这是个奇怪的东西,不会说谎。

这两种都有用吗?(假设您的print_r是print_r($this);)

代码语言:javascript
复制
unset($this->{1});
unset($this->{'1'});

更多信息:Is it possible to delete an object's property in PHP?

编辑:不过,我建议您改变通过PDO获取这些信息的方式,使其成为数组格式。有关如何在这里执行此操作的更多信息:PDO returning execute results to an array

一旦您以数组格式获得它,您可以简单地使用:

代码语言:javascript
复制
unset($data[1]);
票数 1
EN

Stack Overflow用户

发布于 2015-11-03 20:00:21

当您使用json_decode时,可以传入第二个true参数

$this->U16sArray = json_decode($this->U16sJSON,true);

其结果将是一个可以直接使用的数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33506386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档