1

そのため、特定のアプリケーションが持つオプションの数に基づいてHTMLリストを動的に生成しようとしています。

リスト内のアイテムは、次の形式をとる必要があります。

       <li>
           <a href="$HREF" title="$LINK_TITLE">
               <i class="$ICON_CLASS"></i> $OPTION_NAME
           </a>
       </li>

アプリケーションの「オプション」ごとに、、、、、およびの4つの文字列が関連付けられていhrefます。link_titleicon-classoption_name

Cでプログラミングしている場合は、おそらく構造体を使用してこの情報を保持します。PHPでは、私にはよくわかりません。オプションごとにこれらの4つのフィールドを保存するための最も論理的な方法は何ですか?理想的には、単純なforループでリストを生成できるように設定しようとしています。

PHPでこれを行うためのベストプラクティスは何ですか?

4

5 に答える 5

6

多次元配列:

array(
    'option' => array('href' => 'url', 'title' => 'title', 'icon' => 'icon'), 
    'option' => array('href' => 'url', 'title' => 'title', 'icon' => 'icon')
);
于 2013-03-06T19:59:39.120 に答える
3

次のいずれかのクラスを使用できます。

class MyOption {
    public $href;
    public $link_title;
    public $icon_class;
    public $option_name;
}
$op = MyOption();
$op->href = "http://www.google.com";

または配列:

$op = array(
    'href'        => "http://www.google.com";
    'link_title'  => "Google";
    'icon_class'  => "image";
    'option_name' => "name";
);
echo $op['icon_class'];
于 2013-03-06T20:02:29.473 に答える
3

最も簡単な方法は、連想配列を使用することです。

$array = array(
  array(
    "href"=>"value",
    "link_title"=>"value",
    "icon_class"=>"value",
    "option_name"=>"value"
  ),
  array(
    "href"=>"value",
    "link_title"=>"value",
    "icon_class"=>"value",
    "option_name"=>"value"
  ),
);

次にforeach、メイン配列のループを使用して、変数の連想インデックスを取得できます。

または、OOPを使用する場合は、次のように試すことができます。

class Option {
    private $href="";
    private $link_title="";
    private $icon_class="";
    private $option_name="";
    public function __construct($a,$b,$c,$d) {
        $this->href = $a;
        $this->link_title = $b;
        $this->icon_class = $c;
        $this->option_name = $d;
    }
    public function __toString() {
        return "<li><a href=\"".$this->href."\" title=\"".$this->link_title."\">"
           ."<i class=\"".$this->icon_class."\"></i> ".$this->option_name."</a></li>";
    }
}
$array = array(
    new Option("href","title","class","name"),
    new Option("href","title","class","name")
);
echo implode("\n",$array);
于 2013-03-06T20:03:09.267 に答える
1

OOPの方法で実行したい場合は、オブジェクトを使用することもできます。

<?php
    class link {
        public $href;
        public $title;
        public $icon;
        public $option;
        public function __construct($href, $title, $icon, $option) {
            $this->href = $href;
            $this->title = $title;
            $this->icon = $icon;
            $this->option = $option;
        }
    }

    $links = array();
    $links[] = new link('http://www.google.com', 'Google', 'google.png', 'google_option');

    foreach ($links as $link) {
        ?>
            <li>
                <a href="<?=$link->href?>" title="<?=$link->title?>">
                    <i class="<?=$link->icon?>"></i> <?=$link->option?>
                </a>
            </li>
        <?php
    }
?>
于 2013-03-06T20:03:30.737 に答える
0

リストのサイズとそれを使って何をしたいかに応じて、いくつかの良い方法があります。

配列のみを使用する:

$links = array();
$links[] = array('href'=>$href, 'title'=>$title, 'class'=>$class, 'name'=>$name);
$links[] = array('href'=>$href2, 'title'=>$title2, 'class'=>$class2, 'name'=>$name2);

foreach ($links as $link) {
    echo "<li>
           <a href=\"{$link['href']}\" title=\"{$link['title']}\">
               <i class=\"{$link['class']}\"></i> {$link['name']}
           </a>
          </li>";
}

この場合のオブジェクトを作成し、オブジェクトを配列に格納することもできます。

class linkClass {
    public $href;
    public $title;
    public $class;
    public $name;

    function __construct($href, $title, $class, $name) {
        $this->href = $href;
        $this->title = $title;
        $this->class = $class;
        $this->name = $name;
    }

    function listItem() {
        return "<li>
                  <a href=\"{$this->href}\" title=\"{$this->title}\">
                    <i class=\"{$this->class}\"></i> $this->name}
                  </a>
                </li>";
    }
}

$array_of_link_objects = array();
$array_of_link_objects[] = new link($href, $title, $class, $name);
$array_of_link_objects[] = new link($href2, $title2, $class2, $name2);

foreach ($array_of_link_objects as $link_object) {
    echo $link_object->listItem();
}

将来の参考のために、ハッシュテーブルを使用せずに多数のアイテムを格納する必要がある場合は、php.netのsplFixedArrayドキュメントを参照してみてください。ただし、数値キーしか使用できないため、$spl_object['href']は機能しません。ただし、大規模なsplFixedArrayの場合、メモリの節約は非常に大きくなります。あなたの場合、コードのメンテナンスが後で簡単になるように、これらのリンクを多くの異なるファイルで使用する場合は、オブジェクトアプローチを試してみてください。1つのファイルに分離されていて、100kリンクを使用していない場合(配列はPHPのメモリに関してひどいため)、多次元配列だけで問題ありません。

于 2013-03-06T20:18:03.843 に答える