2

私のアプリには次のコードがあり、トピックのリストをアルファベット順に表示し、各セクションブロックの最初のタグ名で分割します。

例えば:

A
animal
amazing

B
bat
baseball

コードは次のとおりです。

<?php

    foreach($topics as $currentTopic):
        $thisLetter = strtoupper($currentTopic['Topic']['title'][0]);
        $sorted[$thisLetter][] = $currentTopic['Topic']['title'];
        unset($thisLetter);
    endforeach;

    foreach($sorted as $key=>$value):

        echo '<h3 class="alpha"><span>'.$key.'</span></h3>';
        echo '<ol class="tags main">';

        foreach($value as $thisTopic):

            echo '<li class="tag"><em>0</em>';
            echo $this->Html->link('<strong>'.$thisTopic['Topic']['title'].'</strong>',
                        array('controller'=>'topics','action'=>'view','slug'=>$thisTopic['Topic']['slug']),
                        array('escape'=>false,'rel'=>'tag'));
            echo '</li>';
        endforeach;

        echo '</ol>';

    endforeach;

    ?>

ただし、配列を分割したため、$ thisTopic変数はタイトルとその他の必要なデータを格納するだけなので、リンクに使用されるトピックスラッグなど、配列内の他のデータにアクセスするのは難しいと感じています。また、TopicPostカウントも表示したい<em>ので、トピックに4つの関連する投稿がある場合は<em>4</em>

現在私がしていることをしているとエラーが発生します:Fatal error: Cannot use string offset as an array配列を分割したので...

誰か助けてもらえますか?

$ topics配列をデバッグすると、次のようになります。

array(
    (int) 0 => array(
        'Topic' => array(
            'id' => '5',
            'title' => 'amazing',
            'slug' => 'amazing'
        ),
        'TopicPost' => array(
            (int) 0 => array(
                'id' => '9',
                'topic_id' => '5',
                'post_id' => '101'
            )
        )
    ),
    (int) 1 => array(
        'Topic' => array(
            'id' => '4',
            'title' => 'amazingness',
            'slug' => 'amazingness'
        ),
        'TopicPost' => array(
            (int) 0 => array(
                'id' => '8',
                'topic_id' => '4',
                'post_id' => '100'
            ),
            (int) 1 => array(
                'id' => '12',
                'topic_id' => '4',
                'post_id' => '101'
            ),
            (int) 2 => array(
                'id' => '4',
                'topic_id' => '4',
                'post_id' => '119'
            )
        )
    ),...
4

1 に答える 1

4

トピックのタイトルのみを保存するため、エラーが発生します。

タイトルだけでなく、トピック情報全体を保存することをお勧めします。

$orderedTopics= array();
foreach ($topics as $topic) {
  $orderedTopics[strtoupper($topic['Topic']['title'][0])][] = $topic;
}

そして、それを表示するには:

foreach ($orderedTopics as $section=>$topics) {
  echo $section;
  foreach ($topics as $topic) {
    echo 'Title: ' . $topic['Topic']['title'];
    echo 'Body: ' . $topic['Topic']['body'];
    //etc...
  }
}
于 2012-05-17T13:37:17.187 に答える