Как построить массивы объектов в 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";

Мне нравится, насколько это ясно, но поскольку мне нужно указать номер индекса, я не могу их легко переставить. Как я могу сделать это без номера индекса? Связано, что является лучшим способом сделать это?

Я также попытался написать это, создав класс, и чтобы каждое место в массиве было экземплярами этого класса. Но так как это файл конфигурации, было трудно читать и знать, какой аргумент использовался с каким параметром. Вот почему я выбрал этот метод старой школы выше.

Любые мысли очень ценятся!

5 ответов

Решение

Этот код

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

в любом случае недопустимо - вы получите "строгое" предупреждение, если не правильно инициализируете объект. Поэтому вы должны как-то сконструировать объект - либо с помощью конструктора:

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

или используя приведение stdclass

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

Если вы сделаете их массивами с именованными ключами, а не объектами, вы можете сделать это так:

$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 и использовать слизняки в качестве ключей, если хотите.

Есть три способа:

Способ 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"
    ),
   
);

Предполагая, что вы не устанавливаете какие-либо $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 каждый раз, чтобы не перезаписывать элемент.

Предполагая, что слаг будет уникальным, возможно, используйте его для идентификации ваших массивов страниц:

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

так далее

Вам просто нужно использовать ключ массива, чтобы получить значение слага.

Если вы хотите поддерживать индексы последовательности. Может быть, это поможет.

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

Проверьте

Другие вопросы по тегам