Заголовок может немного сбивать с толку, потому что я не совсем уверен, как описать свой «массив». Вот как это выглядит, когда я использую 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 для моих данных данные в моей базе данных выглядят так...
[{"Имя":"Джеймс Суитер","Навык":2,"Возраст":15,"AgeWeeks":19,"ШансОставления":8},{"Имя":"Нил Роулетт","Навык": 8, "Возраст": 15, "AgeWeeks": 11, "Вероятность ухода": 3}
Он отображается как U16sArray -> Array, когда я делаю print_r.
После того, как unset был использован где-то в данных и снова сохранен, данные теперь выглядят так.
{"0":{"Имя":"Джеймс Суйтер","Навык":2,"Возраст":15,"AgeWeeks":20,"Вероятность ухода":9},"1":{"Имя":" Нил Роулетт", "Навык": 8, "Возраст": 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
Таким образом, может показаться, что он работает нормально, unset изменяет его на объект, а затем, когда я загружаю его в следующий раз, он больше не работает как массив.
Решение состоит в том, чтобы использовать array_values для переиндексации массива перед кодированием/сохранением.
unset
? - person KodeFor.Me   schedule 03.11.2015unset($this->{'1'});
В объекте нет массивов, только числовые свойства. - person AbraCadaver   schedule 03.11.2015stdClass
для массива, а не просто используете обычный массив? - person Barmar   schedule 03.11.2015