2011-08-27 8 views
1

범주 개수에 따라 WordPress 옵션 페이지에 일부 설정을 추가하려고합니다. 메인 배열 내부에서 사용할이 함수를 만들었지 만 첫 번째 배열 만 반환하고 나머지 3 개는 제외합니다. A 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" => "" 
    ); 
    } 
} 
+1

당신은 루프 내에서 반환됩니다. 그것은 당신이 묘사하는 행동을 일으킬 것입니다. 각 히트를 임시 배열에 추가하고 루프 이후에이를 반환해야합니다. –

+1

'반환'에 대해 좀 더 생각해보십시오. – hobbs

답변

1

함수는 한 번만 반환 할 수 있습니다. 루프에서 여러 항목을 반환 할 수 없습니다. 첫 번째 리턴에 도달하면 함수를 완전히 종료합니다. 배열 배열을 반환하려면 다음을 사용해야합니다.

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

함수 밖에서 다른 루프를 사용하지 않고 각 배열을 개별적으로 반환하는 방법이 있습니까? – Norbert

+0

함수는 1 개의 값만 반환 할 수 있습니다. 여러 값을 반환하려면 다음을 포함하는 배열을 반환해야합니다. 여러 값을 반환 할 수 있다고하더라도 호출하는 프로그램에서 어떻게 값에 액세스 할 수 있습니까? – Kibbee

4

한 번만 반환 할 수 있습니다!

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

@Fraser 타이핑을 시작했을 때가 아니 었습니다. –

+0

작동하려면 각 배열을 주 배열에 개별적으로 추가해야하므로 배열 반환 (array())이 작동하지 않습니다. – Norbert

+0

@Norbert 머리를 사용하십시오. 예를 들어 그 문제에 대한 무한한 해결책이 있습니다. main 배열을 참조로 전달하고 새로운 배열을 다음과 같이 푸시합니다 :'listSections (& $ mainarray) {... $ mainarray [] = array (...' –

0

함수에서 return을 호출하면 함수의 실행이 즉시 즉시 종료되므로 첫 번째 배열이 반환되면 함수가 끝나고 첫 번째 배열 만 다시 가져옵니다.

대신 다차원 배열 (반환하려는 모든 배열을 포함하는 배열)을 반환 해 볼 수 있습니다.

0

return 키워드의 목표는 같은 일부 코드로 반환 된 배열을 통해 당신이 할 수있는 루프는 기능을 종료하는 것입니다. 따라서 귀하의 의견은 첫 번째 요소 만 반환하는 것이 일반적입니다. 당신이 exemple 배열에 모든 요소를 ​​넣고이 배열 반환 할 수 있습니다

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; 
} 
관련 문제