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

时间:2010-09-14 09:42:36

标签: 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";

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

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

非常感谢任何想法!

6 个答案:

答案 0 :(得分:27)

此代码

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

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

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

或使用stdclass cast

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

答案 1 :(得分: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'
     )
);

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

答案 2 :(得分:2)

假设您没有在其他位置设置任何$pages_array元素,则可以设置一个简单变量。

$i = 0;

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

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

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

您必须记住每次都增加$i,这样就不会覆盖元素。

答案 3 :(得分:2)

有三种方法:

方法1:

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

];

方法2:

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

方法3:

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

    array(
      "id" => 1,
      "name" => "James"
    ),
   
);

答案 4 :(得分:1)

假设slug是唯一的,也许用它来识别您的页面数组:

$pages_array = array() ;

$pages_array['index'] = array() ;
$pages_array['index']['title'] = 'Site Index' ;
$pages_array['index']['template'] = 'interior' ;

$pages_array['a'] = array() ;
$pages_array['a']['title'] = '100% Wide (Layout A)' ;
$pages_array['a']['template'] = 'interior' ;

您只需要使用数组键来获取slug值。

答案 5 :(得分:0)

如果要维护序列索引。可能会有所帮助。

$pages_array[]->slug = "index";
$key = array_search(end($pages_array),$pages_array );
$pages_array[$key]->title = "Site Index";  
$pages_array[$key]->template = "interior";

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

$pages_array[]->slug = "homepage";
$key = array_search(end($pages_array),$pages_array );
$pages_array[$key]->title = "Homepage";
$pages_array[$key]->template = "homepage";

Check