2011-08-27 209 views
1

我想添加一些設置到我的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" => "" 
    ); 
    } 
} 
+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用你的頭。這個問題有無數的解決方案,例如通過引用傳遞主數組並將新數組推送到該列:'listSections(&$ mainarray){... $ mainarray [] = array(...' –

0

當您從函數調用return時,它總是立即結束該函數的執行,因此只要返回第一個數組,函數就會結束 - 這就是爲什麼您只返回第一個數組。

您可以嘗試返回一個多維數組(包含您想要返回的所有數組的數組)。

0

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; 
}