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

dyl*_*zed 15 php arrays object

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

$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";
Run Code Online (Sandbox Code Playgroud)

我喜欢这是多么明确,但因为我必须指定索引号,所以我不能轻易地重新排列它们.如果没有索引号怎么办呢?相关的,有什么更好的方法呢?

我也尝试通过创建一个类来编写它,并让数组上的每个点都是该类的实例.但由于这是一个配置文件,因此很难阅读并知道参数是什么参数.这就是我选择上述老式方法的原因.

任何想法都非常感谢!

use*_*291 29

这段代码

 $pages_array[1]->slug = "a";
Run Code Online (Sandbox Code Playgroud)

无论如何都是无效的 - 如果你没有正确初始化对象,你会得到一个"严格"的警告.所以你必须以某种方式构造一个对象 - 使用构造函数:

 $pages_array[] = new MyObject('index', 'title'....)
Run Code Online (Sandbox Code Playgroud)

或者使用stdclass演员

 $pages_array[] = (object) array('slug' => 'xxx', 'title' => 'etc')
Run Code Online (Sandbox Code Playgroud)

  • 对象投射+1.我就是这样做的. (3认同)

jam*_*ace 11

有以下三种方式:

方式一:

$pages_array=[
    [
        "id" => 1,
        "name" => "James"
    ],
    [
        "id" => 2,
        "name" => "Mary"
    ]

];
Run Code Online (Sandbox Code Playgroud)

方式2:

 $pages_array[0] =
    [
        "id" => 1,
        "name" => "James"
    ];
 $pages_array[1] = 
    [
        "id" => 2,
        "name" => "Mary"
    ];
Run Code Online (Sandbox Code Playgroud)

方式3:

$pages_array = array(
    array(
      "id" => 2,
      "name" => "Mary"
    ),

    array(
      "id" => 1,
      "name" => "James"
    ),
   
);
Run Code Online (Sandbox Code Playgroud)


Sam*_*war 6

如果你使用命名键而不是对象创建数组,你可以这样做:

$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'
     )
);
Run Code Online (Sandbox Code Playgroud)

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