标题可能有点混乱,因为我不太清楚如何描述我的“数组”。下面是我使用print_r时的样子.
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从数据库中获取的。
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中解码
$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重新索引数组。
发布于 2015-11-03 18:45:32
恐怕这只是你不能做的事情之一。这与PHP用于处理此类情况的方式有关(而不是)。基本上,您不能使用数字变量名访问对象属性。
这个类似问题的答案会更好地解释:https://stackoverflow.com/a/10333200/1012699
但是,可以将对象转换为数组并访问/删除其内容。如果你想要的话,就把它扔回一个物体里。参见php:http://php.net/manual/en/language.types.type-juggling.php中的类型转换手册
发布于 2015-11-03 18:24:59
这是个奇怪的东西,不会说谎。
这两种都有用吗?(假设您的print_r是print_r($this);)
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
一旦您以数组格式获得它,您可以简单地使用:
unset($data[1]);发布于 2015-11-03 20:00:21
当您使用json_decode时,可以传入第二个true参数
$this->U16sArray = json_decode($this->U16sJSON,true);
其结果将是一个可以直接使用的数组。
https://stackoverflow.com/questions/33506386
复制相似问题