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