使用静态方法调用(PHP)从数组数组创建对象数组
我有这样一个数组:使用静态方法调用(PHP)从数组数组创建对象数组,php,class,static,Php,Class,Static,我有这样一个数组: // Define pages $pages = array( "home" => array( "title" => "Home page", "icon" => "home" ), "compositions" => array( "title" => "Composition page", "icon" => "music" ), );
// Define pages
$pages = array(
"home" => array(
"title" => "Home page",
"icon" => "home"
),
"compositions" => array(
"title" => "Composition page",
"icon" => "music"
),
);
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
}
for ( $pages as $pageName => $pageObject ) echo $pageName . " has title: " . $pageObject->title;
我想实现的是:
$navigation = Utils::makeNavigation($pages);
,将$navigation
创建为对象数组,以便我可以在视图中解析它
像这样:
// Define pages
$pages = array(
"home" => array(
"title" => "Home page",
"icon" => "home"
),
"compositions" => array(
"title" => "Composition page",
"icon" => "music"
),
);
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
}
for ( $pages as $pageName => $pageObject ) echo $pageName . " has title: " . $pageObject->title;
static
Util-like类
方法适合这种问题吗
编辑
我想出了这样的办法,这样行吗
<?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;
}
}
}
假设您在代码中手动创建数组,只需强制转换到对象:
$pages = array(
"home" => ( object ) array(
"title" => "Home page",
"icon" => "home"
),
"compositions" => ( object ) array(
"title" => "Composition page",
"icon" => "music"
),
);
这将允许像访问对象一样访问它们:
$pages->home->title;
或者像这样循环:
// Define pages
$pages = array(
"home" => array(
"title" => "Home page",
"icon" => "home"
),
"compositions" => array(
"title" => "Composition page",
"icon" => "music"
),
);
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
}
for ( $pages as $pageName => $pageObject ) echo $pageName . " has title: " . $pageObject->title;
我会将创建作为类的静态成员包括在内,以将特定于类的代码保持在一起:
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 ();
区分“好”和“坏”的标准是什么?@zerkms请看我的编辑。.“好”是什么?能否客观地衡量?对一个人来说是“好的”,对另一个人来说是“不好的”。这对我来说“不好”——我会使用array\u map
。这算是一个答案吗?你能举一个关于我的情况的小例子吗,关于你如何使用数组_map
?我会使用它而不是我不想实现的循环,我举了一个例子,说明我希望最终得到什么。在一个itetrable
对象中具有所有3个属性。你错过了我也需要的页面
属性。