改进现有对象数组以自动创建数组

时间:2019-01-02 11:49:20

标签: php arrays object

我正在尝试创建一个易于更新的标题/ URL列表,以填充我网站上的各个位置(博客文章)。

我有一个有效的版本,但是知道它可以改进,因此不必在每次添加新的类或博客页面时手动更新数组创建。

到目前为止,我已经搜索了所有问题,但似乎无法在网上找到与此类似的问题。目前,我有一个for循环,该循环基于类构造函数中的迭代变量进行计数:

for ($x = 0; $x <= $pageCount; $x++) {
    $pageList[] = '$page' . $x;
} 

这样,我就能得到代表变量的正确单词,但不能代表变量中的值。

类看起来像这样:

class BlogPage
{
    public $link;
    public $name;
    public $tags;

    public static $counter = 0;

    function __construct() {
        self::$counter++;
    }
}

$page0 = new BlogPage();
$page0->link = 'hike-safe';
$page0->name = 'How to Conquer the Mountains';
$page0->tags = "";

$page1 = new BlogPage();
$page1->link = 'how-to-map';
$page1->name = 'How to Read a Map and Compass';
$page1->tags = "";

$page2 = new BlogPage();
$page2->link = 'test';
$page2->name = 'Test thats a bit longer';
$page2->tags = "";

$pageCount = BlogPage::$counter - 1;

for ($x = 0; $x <= $pageCount; $x++) {
    $pageList[] = '$page' . $x;
} 

这是我将要手动更新的数组:

$blogPages = array($page2, $page1, $page0);

如何解决这个可变难题?

1 个答案:

答案 0 :(得分:0)

documentation中所述,您可以使用{}动态地创建var名称。

考虑以下示例:

$a0 = "AAA";
$a1 = "BBB";
$a2 = "CCC";
$cnt = 3;
$res = array();
for($i = 0; $i < $cnt; $i++)
    $res[] = ${"a" . $i}; // will assign value of $a0, $a1, $a2 in each iteration

现在$res将包含:

Array
(
    [0] => AAA
    [1] => BBB
    [2] => CCC
)