Что я хотел бы сделать: упорядочить их по имени, а затем отсортировать их в цикле:
$people = $this->Person->find('all', array(
'order' => 'Person.name ASC'
));
И тогда вы можете сделать:в представлении, поэтому вам не нужно повторять его дважды:
<ul>
<?php $letter = 'first'; ?>
<?php foreach ($people as $person) : ?>
<?php $firstLetter = strtolower(substr($person['Person']['name'], 0, 1)); ?>
<?php if ($firstLetter !== $letter) : ?>
<?php if ($letter !== 'first') : ?>
</ul></li>
<?php endif; ?>
<?php $letter = $firstLetter; ?>
<li><h2><?php echo $firstLetter; ?></h2><ul>
<?php endif; ?>
<li><?php echo $person['Person']['name']; ?></li>
<?php endforeach; ?>
</ul></li></ul>
Я бы не знал, как получить эту структуру, просто используя вызов find (за исключением 26 вызовов или создания таблицы БДсодержит все буквы), и я не понимаю, почему это было бы необходимо.
Надеюсь, это поможет!(ps-код не проверен ... но вы понимаете, если будут какие-либо опечатки)