标题可能有点令人困惑,因为我不太清楚如何描述我的数组'。这是我使用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函数之前,我数据库中的数据看起来像这样......
[{" Name":" James Suiter"," Skill":2," Age":15," AgeWeeks":19," ChanceOfLeaving":8},{" Name":" Neil Rowlett"," Skill":8, "年龄":15," AgeWeeks":11," ChanceOfLeaving":3}
它显示为U16sArray - >我执行print_r时的数组。
在数据中某处使用unset并再次保存后,数据现在看起来像这样。
{" 0":{"姓名":" James Suiter","技能":2,"年龄&# 34;:15," AgeWeeks":20," ChanceOfLeaving":9}," 1" {"名称":&#34 ; Neil Rowlett"," Skill":8," Age":15," AgeWeeks":12," ChanceOfLeaving":4 }
所以' 0'和' 1'已被添加。现在我的代码在各个地方出错了,print_r现在将其显示为U16sArray - > stdClass对象。
解决方案(我认为) - 大约1/4向下的PHP:json_encode页面,我认为是答案,由simoncpu在这里回答'。显然,“取消设置元素”也会删除键。 json_encode()现在假设这是一个对象,并将对其进行编码。'
http://php.net/manual/en/function.json-encode.php
所以它似乎工作正常,未设置将其更改为对象,然后当我下次加载它时,它不再作为数组运行。
解决方案是在编码/保存之前使用array_values重新索引数组。
答案 0 :(得分:1)
这是一个奇怪的对象,不会撒谎。
这些都可以吗? (假设你的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]);
答案 1 :(得分:0)
我担心这只是你做不了多少事情之一。 它与PHP(非)设计用于处理此类情况的方式有关。基本上,您无法使用数字变量名称
访问对象属性对类似问题的回答将更好地解释: https://stackoverflow.com/a/10333200/1012699
但是,您可以将对象强制转换为数组并访问/删除其内容。如果你愿意的话,然后再投回一个物体。 请参阅php中关于类型转换的手册: http://php.net/manual/en/language.types.type-juggling.php
答案 2 :(得分:0)
当您使用json_decode时,您可以传入第二个参数true
$ this-> U16sArray = json_decode($ this-> U16sJSON,true);
结果将是一个可以直接使用的数组。