-1

PHPには、次のような多次元配列があります。

Array
(
    [0] => Array
        (
            [category_id] => 1
            [name] => Football Team Name 1
        )
    [1] => Array
        (
            [category_id] => 2
            [name] => Football Team Name 2
        )
    [2] => Array
        (
            [category_id] => 3
            [name] => Hockey Team Name 1
        )
    [3] => Array
        (
            [category_id] => 4
            [name] => Hockey Team Name 2
        )
    [4] => Array
        (
            [category_id] => 5
            [name] => Hockey Team Name 3
        )

( nameと呼ばれる配列のキーの)最初の単語は、常にカテゴリのタイトルとして使用するため、最終的な出力を次のようにする方法を知りたいのですが、これまでのところこれを理解できませんでした。

出力例

私の場合、ソリューションは最終的にSmartyで使用する必要があります。

これに関するアイデアをいただければ幸いです。

4

1 に答える 1

4

データを Smarty に解析する前に、データを準備する必要があります。

あなたはこのようにすることができます:

$result = array(
    array('name' => 'Hockey Team 1', 'category_id' => 1),
    array('name' => 'Hockey Team 2', 'category_id' => 2),
    array('name' => 'Hockey Team 3', 'category_id' => 3),
    array('name' => 'Football Team 1', 'category_id' => 4),
    array('name' => 'Football Team 2', 'category_id' => 5),
    array('name' => 'Football Team 3', 'category_id' => 6)
);

$sports = array();

foreach ($result as $team) {
    $sport_parts = explode(' ', $team['name']);
    $sport = array_shift($sport_part);
    $team['name'] = join(' ', $sport_parts);
    if (isset($sports[$sport]) === FALSE) {
        $sports[$sport] = array();
    }
    $sports[$sport][] = $team;
}

これにより、次のようなデータセットが生成され、Smarty で簡単に反復できます。

array(2) {
  ["Hockey"]=>
  array(3) {
    [0]=>
    array(2) {
      ["name"]=>
      string(13) "Team 1"
      ["category_id"]=>
      int(1)
    }
    [1]=>
    array(2) {
      ["name"]=>
      string(13) "Team 2"
      ["category_id"]=>
      int(2)
    }
    [2]=>
    array(2) {
      ["name"]=>
      string(13) "Team 3"
      ["category_id"]=>
      int(3)
    }
  }
  ["Football"]=>
  array(3) {
    [0]=>
    array(2) {
      ["name"]=>
      string(15) "Team 1"
      ["category_id"]=>
      int(4)
    }
    [1]=>
    array(2) {
      ["name"]=>
      string(15) "Team 2"
      ["category_id"]=>
      int(5)
    }
    [2]=>
    array(2) {
      ["name"]=>
      string(15) "Team 3"
      ["category_id"]=>
      int(6)
    }
  }
}

Smarty テンプレートでの例:

{foreach from=$sports key=sport item=teams}
  <h1>{$sport}</h1>
    <ul>
      {foreach from=$teams item=team}
        <li>{$team['name']}</li>
      {/foreach}    
    </ul>
{/foreach}
于 2012-08-29T15:14:19.243 に答える