У меня есть PersonMapper, который считывает данные из БД и создает объекты Person (PHP Слим Framework 3):Создание PHPExcel из массива объектов
<?php
class PersonMapper extends Mapper {
public function getPersons() {
$stmt = $this->db->query("SELECT p.id, p.firstname, p.pastname FROM persons p");
$results = [];
while($row = $stmt->fetch()) {
$results[] = new Person($row);
}
return $results;
}
}
class Person implements ArrayAccess {
protected $id;
protected $firstname;
protected $lastname;
public function __construct(array $data) {
// no id if we're creating
if(isset($data['id'])) { $this->id = $data['id']; }
$this->firstname= $data['firstname'];
$this->lastname= $data['lastname'];
}
public function getId() { return $this->id; }
public function getFirstname() { return $this->firstname; }
public function getLastname() { return $this->lastname; }
public function offsetExists($offset) {
return array_key_exists($offset, $this->asArray());
}
public function offsetGet($offset) {
return $this->offsetExists($offset) ? $this->asArray()[$offset]:NULL;
}
public function offsetSet($offset, $value) {
$this->asArray()[$offset] = $value;
}
public function offsetUnset($offset) {
if ($this->offsetExists($offset)) {
$_array = $this->asArray();
unset($_array[$offset]);
}
}
public function asArray() {
return array(
'id' => $this->id,
'firstname' => $this->firstname,
'kurzbezeichnung' => $this->lastname);
}
}
Теперь я могу получить массив объектов человека:
$mapper = new PersonMapper($this->db);
$persons= $mapper->getPersons();
Теперь я хочу, чтобы поместить список лиц в файл Excel:
$excelDoc = new PHPExcel();
$excelDoc->setActiveSheetIndex(0);
$excelDoc->getActiveSheet()->fromArray($persons, null, 'A1');
$writer = PHPExcel_IOFactory::createWriter($excelDoc, 'Excel2007');
$writer->save("persons.xlsx");
к сожалению, PHPExcel не может га ndle такой тип структуры данных:
Catchable fatal error: Object of class Person could not be converted to
string in /path/to/src/vendor/phpoffice/phpexcel/Classes/
PHPExcel/Cell/DefaultValueBinder.php on line 65
Любая помощь очень ценится!
Я не думаю, что PHP предлагает любой способ преобразования объекта в массив автоматически. Каждый отдельный «человек» является объектом, поэтому вам, вероятно, необходимо преобразовать каждый «человек» в массив, прежде чем добавлять массив людей. – apokryfos
Метод 'fromArray()' работает с массивами или массивом массивов, а не с массивом объектов (если эти объекты не реализуют [ArrayAccess] (http://www.php.net/manual/en/class.arrayaccess .php)) –
Итак, класс Person должен реализовать ArrayAccess? –