所以我试图根据特定应用程序的选项数量动态生成HTML列表。
列表中的项目应采用以下形式:
<li>
<a href="$HREF" title="$LINK_TITLE">
<i class="$ICON_CLASS"></i> $OPTION_NAME
</a>
</li>
应用程序中每个“选项”的位置,有四个与之关联的字符串:href
,link_title
,icon-class
和option_name
。
现在,如果我使用C编程,我可能会使用结构来保存这些信息。但在PHP中,我不太确定。对于我来说,为每个选项存储这四个字段最合理的方式是什么?理想情况下,我正在尝试设置它,以便我可以使用简单的for循环生成列表。
PHP的最佳实践是什么?
答案 0 :(得分:6)
多维数组:
array(
'option' => array('href' => 'url', 'title' => 'title', 'icon' => 'icon'),
'option' => array('href' => 'url', 'title' => 'title', 'icon' => 'icon')
);
答案 1 :(得分: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'];
答案 2 :(得分: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);
答案 3 :(得分: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
}
?>
答案 4 :(得分: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 [&#39; href&#39;]不会起作用。但是,对于大型splFixedArrays,内存节省是巨大的。对于您的情况,我可能会说,如果您要在许多不同的文件中使用这些链接,请尝试使用对象方法,以便以后轻松进行代码维护。如果它被隔离到一个文件而你没有使用100k链接(因为数组在PHP中对于内存是可怕的),你只需要多维数组即可。