2014-10-08 60 views
0

我有一個這樣的數組:創建從數組的數組對象的數組,採用靜態方法調用(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 
} 

staticUtil-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

什麼是您的標準來區分「好」和「壞」? – zerkms 2014-10-08 23:51:54

+0

@zerkms請參閱我的編輯.. – branquito 2014-10-09 00:10:20

+0

什麼是「好」?它可以客觀衡量嗎?其中一個是「好」,另一個是「不好」。這對我來說「不好」 - 我會用'array_map'來代替。這算作答案嗎? – zerkms 2014-10-09 00:14:16

回答

1

假設你手動創建陣列在你的代碼,只投對象:

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

我將包括創建作爲類的靜態成員,以保持類特定的代碼在一起:

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

這不是我想要完成的,我給出了我想要結束的例子。將所有3個屬性放在一個'itterable'對象中。你錯過了我還需要的'page'屬性。 – branquito 2014-10-09 11:38:01