Как удалить объект из массива? PHP


у меня есть array, где я сохраняю объекты типа Materia, где Alumno, и я хочу создать функцию, чтобы отписаться от предмета, то есть удалить объект из массива, я попробовал с функцией unset() и дал мне ошибку и исследование немного lei, что приравнивание переменной к null в php7 будет делать тот же эффект и удалить объект из массива, но я не в состоянии сделать удаление объекта. фрагмент кода, который я показываю, является простым куском, так как наиболее разработано.

<?php
class Materia{
    $nombre;
    public function __construct($nombre){
        $this->nombre=$nombre;
    }
}
?>
<?php 
class Alumno{
  $nombre;
  $misMaterias=array();
  public fucntion __construct($nombre){
  $this->nomre=$nombre;
  } 
  public function getMaterias(){
    return $this->misMaterias;
  }
  public function darBajaManual(Materia $pMateria){
    foreach ($this->getMaterias() as $unaMateria) {
      if($unaMateria==$pMateria){
         $unaMateria=NULL;
         return 'te has dado de baja de '.$pMateria;
      }
    }
  }
}     
?>
<?php
$mates=new Materia('matematicas');
$nuevoAlumno= new Alumno('Chris');
$nuevoAlumno->darBajaManual($mates);
var_dump($nuevoAlumno);
?>
Author: cisco, 2019-04-23

1 answers

Тема находится в foreach:

foreach ($this->getMaterias() as $unaMateria) {
  if($unaMateria==$pMateria){
     $unaMateria=NULL;
     return 'te has dado de baja de '.$pMateria;
  }
}

Объект $unaMateria является копией каждого из элементов getMaterias(). Когда вы делаете $unaMateria=NULL, вы действительно не удалили предмет из массива предметов ученика.

Чтобы сделать это, вы можете изменить for, добавив индекс (key) массива:

foreach ($this->misMaterias as $key => $unaMateria) {
  if($unaMateria==$pMateria){
     unset($this->misMaterias[$key]);
     return 'te has dado de baja de '.$pMateria;
  }
}
 4
Author: Jakala, 2019-04-23 17:44:31