class — создание массива объектов из массива массивов с использованием статического вызова метода (PHP)

У меня есть такой массив:

// Define pages
$pages = array(
"home" => array(
"title" => "Home page",
"icon" => "home"),
"compositions" => array(
"title" => "Composition page",
"icon" => "music"),
);

И то, что я пытаюсь сделать, это иметь:

$navigation = Utils::makeNavigation($pages);

, Создайте $navigation как массив объектов, так что я могу разобрать его на мой взгляд
как это:

foreach($navigation as $nav_item){
echo $nav_item->page; // home(1st iter.), compositions(2nd iter.)
echo $nav_item->title;// Home page, Composition page
echo $nav_item->icon; // home, music
}

Является static Util-like-class подходить хорошо для такого рода проблем?

РЕДАКТИРОВАТЬ

Я придумал что-то вроде этого, это нормально?

<?php
class Utils {

protected static $_navigation;

public static function makeNavigation($pages = array()){

if (!empty($pages)){
foreach ($pages as $page => $parts) {
$item = new stdClass;
$item->page = $page;

foreach ($parts as $key => $value) {
$item->$key = $value;
}
self::$_navigation[] = $item;
}
return self::$_navigation;
}
}
}

0

Решение

Предполагая, что вы создаете массив вручную в своем коде, просто приведите к объектам:

$pages = array(
"home" => ( object ) array(
"title" => "Home page",
"icon" => "home"),
"compositions" => ( object ) array(
"title" => "Composition page",
"icon" => "music"),
);

Это позволит получить к ним доступ как к объектам:

$pages->home->title;

или перебирая их так:

for ( $pages as $pageName => $pageObject ) echo $pageName . " has title: " . $pageObject->title;
1

Другие решения

Я бы включил создание как статический член класса, чтобы сохранить код, специфичный для класса:

class NavItem
{
//  Static member does not require an object to be called
static function create ($def)
{
$ret = array ();
foreach ($def as $idx=>$navDef)
$ret [$idx] = new NavItem ($navDef);
return $ret;
}
function __construct ($def)
{
// Do something more specific with the current def (title, icon array)
$this->param = $def;
}

function display ()
{
//  Simple example
echo $this->param ['title'];
echo $this->param ['icon'];
}
var                     $param;
};

//  Using your pages array as above
$pages = NavItem::create ($pages);
foreach ($pages as $idx=>$page)
$page->display ();
0

По вопросам рекламы [email protected]