这是一个奇怪的问题。我正在手动构建一个对象数组,如下所示:
$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";
我喜欢这是多么明确,但因为我必须指定索引号,所以我不能轻易地重新排列它们。如果没有索引号怎么办呢?相关的,有什么更好的方法呢?
我也尝试通过创建一个类来编写它,并让数组上的每个点都是该类的实例。但由于这是一个配置文件,因此很难阅读并知道参数是什么参数。这就是我选择上述老式方法的原因。
非常感谢任何想法!
答案 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";