在PHP中存储此结构化信息的最合理方法是什么?

时间:2013-03-06 19:57:27

标签: php

所以我试图根据特定应用程序的选项数量动态生成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的最佳实践是什么?

5 个答案:

答案 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中对于内存是可怕的),你只需要多维数组即可。