1

因此,我试图根据特定应用程序具有的选项数量动态生成 HTML 列表。

列表中的项目应采用以下形式:

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

其中,对于应用程序中的每个“选项”,都有四个与之关联的字符串:hreflink_titleicon-classoption_name.

现在,如果我用 C 编程,我可能会使用结构来保存这些信息。不过在 PHP 中,我不太确定。我为每个选项存储这四个字段的最合乎逻辑的方式是什么?理想情况下,我正在尝试对其进行设置,以便可以使用简单的 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'] 不起作用。不过,对于大型 splFixedArrays,内存节省是巨大的。对于您的情况,如果您要在许多不同的文件中使用这些链接,我可能会说尝试使用对象方法,以便以后轻松维护代码。如果它被隔离到一个文件并且您没有使用 100k 链接(因为数组对于 PHP 中的内存来说非常糟糕),那么只使用多维数组就可以了。

于 2013-03-06T20:18:03.843 回答