标题可能有点混乱,因为我不太清楚如何描述我的'数组'。下面是我使用print_r时的外观...PHP - 从stdclass对象的数组中删除一个元素
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($this->U16sArray[$arrayindex])
我得到...
Fatal error: Cannot use object of type stdClass as array.
我还是很困惑,如何或为什么我的'阵列'首先出现这种方式。但我很高兴以这种方式使用它,只要我可以删除元素。
根据要求提供更多信息。它是使用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);
编辑 - 更新。
我正在慢慢追查这个问题。基本上,这一切都工作正常,直到我使用未设置的功能,在这一点上,东西被改变,保存,然后当我重新加载它,它开始抛出错误。据推测,它从一种阵列改变为另一种阵列。
例如,使用我的数据未设定功能之前,我的数据库中的数据看起来像这样...
[{“名称”:“詹姆斯花套”,“技巧”:2,“年龄“:15,”AgeWeeks“:19,”ChanceOfLeaving“:8},{”Name“:”Neil Rowlett“,”技能“:8,”年龄“:15,”AgeWeeks“:11,”ChanceOfLeaving“ }
当我执行print_r时,它显示为U16sArray - > Array。
将unset用于数据中的某处并再次保存后,数据现在看起来像这样。 {“0”:{“Name”:“James Suiter”,“Skill”:2,“Age”:15,“AgeWeeks”:20,“ChanceOfLeaving”:9},“1”:{“012”名称“:”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重新索引数组。
你使用过'unset'吗? –
尝试'unset($ this - > {'1'});'没有数组只是数字属性的对象。 – AbraCadaver
为什么你将'stdClass'用于数组而不是仅仅使用普通数组? – Barmar