Foreach не возвращает все значения в массиве - PullRequest
0 голосов
/ 15 марта 2012

Трудно понять, почему цикл foreach в функции не распечатывает все значения в массиве include.Любая помощь приветствуется.

Массив $ this-> включает в себя:

Array (
    [0] => http://localhost/assets/css/style.css
    [1] => http://localhost/assets/css/internal.css
    [2] => http://localhost/assets/css/custom-theme/jquery-ui-1.8.17.custom.css
    [3] => http://localhost/assets/js/jquery-ui-1.8.16.custom.min.js
)

Функция:

public function print_includes()
{
    print_r($this->includes);
  // Initialize a string that will hold all includes
  $final_includes = '';
  foreach ($this->includes as $include)
  {
    // Check if it's a JS or a CSS file
    if (preg_match('/js$/', $include))
    {
      // It's a JS file
      $final_includes .= '<script type="text/javascript" src="' . $include . '"></script>';
    }
    elseif (preg_match('/css$/', $include))
    {
      // It's a CSS file
      $final_includes .= '<link href="' . $include . '" rel="stylesheet" type="text/css" />';
    }
    return $final_includes;
  }
}

Что напечатано с помощью $ this-> layouts-> print_include():

<link href="http://localhost/assets/css/style.css" rel="stylesheet" type="text/css" /></head>

Ответы [ 4 ]

0 голосов
/ 15 марта 2012

Я думаю, что ваш foreach цикл неправильный

foreach($this->includes as $inc) {

    return $final_includes; # should not be here.
}
0 голосов
/ 15 марта 2012

Место, которое вы возвращаете из цикла foreach


foreach ($this->includes as $include)
  {
    // Check if it's a JS or a CSS file
    if (preg_match('/js$/', $include))
    {
      // It's a JS file
      $final_includes .= '';
    }
    elseif (preg_match('/css$/', $include))
    {
      // It's a CSS file
      $final_includes .= '';
    }
  }
return $final_includes;

0 голосов
/ 15 марта 2012

вы используете возврат внутри foreach, который останавливает его после первого цикла

public function print_includes()
{
    print_r($this->includes);
  // Initialize a string that will hold all includes
  $final_includes = '';
  foreach ($this->includes as $include)
  {
    // Check if it's a JS or a CSS file
    if (preg_match('/js$/', $include))
    {
      // It's a JS file
      $final_includes .= '<script type="text/javascript" src="' . $include . '"></script>';
    }
    elseif (preg_match('/css$/', $include))
    {
      // It's a CSS file
      $final_includes .= '<link href="' . $include . '" rel="stylesheet" type="text/css" />';
    }
   }
    return $final_includes;

}
0 голосов
/ 15 марта 2012

Ваш оператор возврата находится внутри цикла foreach, поэтому он только когда-либо объединяет первый элемент ссылки и затем возвращает строку как результат функции.Попробуйте переместить его за пределы цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...