2010-09-14 82 views
8

这是一个奇怪的问题。我手动构建对象的数组,像这样:如何在PHP中创建对象数组而不指定索引号?

$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

*(旁注)* PHP有一个本地类,用于通过['SplObjectStorage'](http://de.php.net/manual/en/class.splobjectstorage.php)存储对象集合。如果您需要特定顺序的对象,请查看['SplMaxHeap'](http://github.com/salathe/spl-examples/wiki/SplMaxHeap) – Gordon 2010-09-14 09:56:06

+0

请澄清问题。你想通过“重新整理”来实现什么目标? – Gordon 2010-09-14 09:57:36

回答

19

此代码

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

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

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

或使用stdClass的投

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

+1用于对象铸造。我就是这么做的。 – 2010-09-14 09:57:30

+0

谢谢@ user187291,对象为我工作 – 2016-11-03 15:28:06

1

假设蛞蝓将是独一无二的,或许用它来识别你的页面阵列:

$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' ; 

你只需要使用数组键,让您的蛞蝓值。

4

如果你让他们有一个名为键,而不是对象数组,你可以做这样的:

$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的解决方案相结合这一点,并使用蛞蝓作为钥匙,如果你喜欢。

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

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,这样你就不会覆盖的元素。

+0

这些都是很棒的想法,谢谢大家!对索引进行对象转换和使用变量对于我的问题来说都是非常好的,简单的解决方案,非常感谢。 – dylanized 2010-09-14 22:21:48