如何在PHP中构建对象数组而不指定索引号?

2022-08-30 15:07:56

这是一个奇怪的问题。我正在手动构建一个对象数组,如下所示:

$pages_array[0]->slug = "index";
$pages_array[0]->title = "Site Index";  
$pages_array[0]->template = "interior";

$pages_array[1]->slug = "a";
$pages_array[1]->title = "100% Wide (Layout A)";
$pages_array[1]->template = "interior";

$pages_array[2]->slug = "homepage";
$pages_array[2]->title = "Homepage";
$pages_array[2]->template = "homepage";

我喜欢它的清晰程度,但是因为我必须指定索引号,所以我无法轻易地重新排列它们。如何在没有索引号的情况下执行此操作?相关,什么是更好的方法来做到这一点?

我还尝试通过创建一个类来编写此内容,并使数组上的每个点都是该类的实例。但是由于这是一个配置文件,因此很难阅读并知道什么参数与什么参数一起使用。这就是为什么我选择了上面的这种老式方法。

任何想法都非常感谢!


答案 1

此代码

 $pages_array[1]->slug = "a";

无论如何都是无效的 - 如果您没有正确初始化对象,您将收到“严格”警告。因此,您必须以某种方式构造一个对象 - 或者使用构造函数:

 $pages_array[] = new MyObject('index', 'title'....)

或使用标准类转换

 $pages_array[] = (object) array('slug' => 'xxx', 'title' => 'etc')

答案 2

如果将它们设置为具有命名键而不是对象的数组,则可以按如下方式执行此操作:

$pages_array = array(
     array(
         'slug' => 'index',
         'title' => 'Site Index',
         'template' => 'interior'
     ),

     array(
         'slug' => 'a',
         'title' => '100% Wide (Layout A)',
         'template' => 'interior'
     ),

     array(
         'slug' => 'homepage',
         'title' => 'Homepage',
         'template' => 'homepage'
     )
);

您可以将其与Fanis的解决方案相结合,并根据需要使用slugs作为键。