Функция возвращает только первый массив - PullRequest
1 голос
/ 27 августа 2011

Я пытаюсь добавить некоторые настройки на мою страницу настроек WordPress, которые зависят от количества категорий. Я создал эту функцию для использования внутри основного массива, но она возвращает только первый массив, оставляя остальные 3 у меня есть. print_r покажет все из них, поэтому я не могу понять это.

function listSections() {
  $categories = get_categories();
    foreach($categories as $category) {
      return array (
        "name" => $category->cat_name . " Label Color",
        "desc" => "Select a label color.",
        "id" => $shortname."_label_color" . $category->cat_ID,
        "type" => "select",
        "options" => $color_options,
        "std" => ""
      );
    }
}

Ответы [ 4 ]

4 голосов
/ 27 августа 2011

Вы можете вернуть только один раз!

function listSections() {
  $categories = get_categories();
  $return = array();
    foreach($categories as $category) {
      $return[] = array (
        "name" => $category->cat_name . " Label Color",
        "desc" => "Select a label color.",
        "id" => $shortname."_label_color" . $category->cat_ID,
        "type" => "select",
        "options" => $color_options,
        "std" => ""
      );
    }
    return $return;
}

Исправление заключается в том, что каждый массив помещается во временный массив, а затем возвращается в конце массива.

1 голос
/ 27 августа 2011

Функция может вернуться только один раз.Он не может вернуть несколько вещей в цикле.После того, как он достигает первого возврата, он полностью выходит из функции.Если вы хотите вернуть массив массивов, вы должны использовать следующее:

function listSections() {
    $results = array();
    $categories = get_categories();

    foreach($categories as $category) {
        $results[] = array (
        "name" => $category->cat_name . " Label Color",
        "desc" => "Select a label color.",
        "id" => $shortname."_label_color" . $category->cat_ID,
        "type" => "select",
        "options" => $color_options,
        "std" => ""
        );
    }

    return $results;
}

с использованием синтаксиса $ result [] = xyz;добавит xyz в конец массива.Вы можете перебрать возвращенный массив с помощью некоторого кода, например

$results = listSections();

$count = count($results);
for ($i = 0; $i < $count; $i++) {
    $category = $results[$i];
    echo $category["name"];
    etc......
}
0 голосов
/ 27 августа 2011

Цель ключевого слова return - выйти из функции.Так что это нормально, что ваша функция возвращает только первый элемент.Например, вы можете поместить все элементы в массив и вернуть этот массив:

function listSections() {
  $categories = get_categories();
  $arr = array();
    foreach($categories as $category) {
      $arr[] =  array (
        "name" => $category->cat_name . " Label Color",
        "desc" => "Select a label color.",
        "id" => $shortname."_label_color" . $category->cat_ID,
        "type" => "select",
        "options" => $color_options,
        "std" => ""
      );
    }

    return $arr;
}
0 голосов
/ 27 августа 2011

Когда вы вызываете return из функции, она всегда немедленно завершает выполнение этой функции, поэтому, как только возвращается первый массив, функция завершается - вот почему вы возвращаете только первый массив.

Вместо этого вы можете попытаться вернуть многомерный массив (массив, содержащий все массивы, которые вы хотите вернуть).

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