2012-03-08 3 views
1

У меня есть небольшая функция ниже, которая принимает ассоциативные массивы, и я изо всех сил пытаюсь найти способ изменить ее, чтобы принимать более простые массивы. Было бы легко создать отдельную функцию и удалить цикл foreach, но я пытаюсь понять, есть ли более эффективный способ достичь этого. Любые идеи были бы весьма полезны.Изменение функции PHP для приема различных типов массивов

Функция:

public function set_content($file, $data, $section_name) 
{ 
    $jobs = new Template_Engine(); 
    $jobs->set_file($file); 
    $jobs_output = ''; 

    static $section_title = 0; 
    foreach($data as $job) 
    { 
     //print_r($job); 
     foreach($job as $key=>$value) 
     { 
      $jobs->set($key,$value); 
     } 

     if ($section_title === 0) 
     { 
      $jobs->set("section_title",$section_name); 
     } 
     else 
     { 
      $jobs->clear_set("section_title");  
     } 

     ++$section_title; 
     $jobs_output .= $jobs->output(); 
    } 

    $section_title = 0; 
    return $jobs_output; 
} 

массива Пример 1:

Array ([0] => Array ([custom_id] => 78 [name] => Title Goes [description] => Test [resume_id] => 96 [order_id] => 0 [section_id] => 224 [profile_id] => 38 [user_id] => 1 [vanity_name] => Sample of Template 3 [template_id] => 3 [date_add] => 0000-00-00 00:00:00 [date_mod] => 2012-03-04 11:00:05) [1] => Array ([custom_id] => 76 [name] => A Custom Item [description] => A descrition for a custom item goes here. [resume_id] => 96 [order_id] => 1 [section_id] => 224 [profile_id] => 38 [user_id] => 1 [vanity_name] => Sample of Template 3 [template_id] => 3 [date_add] => 0000-00-00 00:00:00 [date_mod] => 2012-03-04 11:00:05)) 

массива Пример 2:

Array ([list_item] => EnglishSpanishFrenchCatalanJapanese) 
+0

не будет [** this **] (http://codeangel.org/articles/simple-php-template-engine.html) быть лучшим способом реализации шаблонов? –

+0

Возможно, http://php.net/manual/en/function.call-user-func-array.php может помочь – Abhay

+2

вы можете использовать 'is_array()', чтобы определить, нужен ли вам второй вложенный цикл или нет. –

ответ

1

Добавить IF до foreach($job as $key=>$value), чтобы проверить, если первый элемент является массивом или нет:

... 
if (is_array($job)) { 
    foreach($job as $key=>$value) 
    { 
    $jobs->set($key,$value); 
    } 
} else { 
    // treat here the value of the more simpler array; 
    // in this case, $job would contain EnglishSpanishFrenchCatalanJapanese 
} 
... 
+0

Спасибо, что это очень элегантно ... у меня была голова, но я не связал точки. – jsuissa

Смежные вопросы