2011-11-17 108 views
3

我有以下代碼..我知道它可能都是錯誤的,但我沒有處理foreach循環之前。排除foreach循環的值

$last_names = regapiGetLastNames(NULL, -1); 
foreach ($last_names as $name => $last_name_id) 
    $exclude = array('11196','11195','11198','11197'); 
    if(!in_array($name->last_name_id, $exclude)): 
    print '<option value="'.$last_name_id.'">'.$name.'</option>'; 

很明顯它出錯了,有什麼幫助嗎?

+0

把這個你p年齡並在此發佈結果。 $ last_names = regapiGetLastNames(NULL,-1); print_r($ last_names); –

回答

1

如果ID陣列值,那麼你也可以使用array_diff對其進行過濾:

$last_names = regapiGetLastNames(NULL, -1); 

$exclude = array('11196','11195','11198','11197'); 
$last_names = array_diff($last_names, $exclude); 

foreach ($last_names as $name => $last_name_id) { 
    print '<option value="'.$last_name_id.'">'.$name.'</option>'; 
} 
+0

這工作得很好,thx – Gary

0

你可以把它轉換成...

$last_names = regapiGetLastNames(NULL, -1); 

$last_names = array_filter($last_names, function($value) { 
    return in_array($value, array('11196','11195','11198','11197')); 
}); 

foreach ($last_names as $name => $last_name_id) { 
    print '<option value="'.$last_name_id.'">'.$name.'</option>'; 
} 

當你到做你的循環,你只是遍歷你想要的設置。這對分離您的業務規則(刪除某些ID)和演示(回顯HTML)非常有用。

2
$last_names = regapiGetLastNames(NULL, -1); 
$exclude = array('11196','11195','11198','11197'); 
foreach ($last_names as $name => $last_name_id) 
{ 
    if(!in_array($name->last_name_id, $exclude)) 
     print '<option value="'.$last_name_id.'">'.$name.'</option>'; 
} 

您需要用於多線循環的大括號。同時,將數組聲明外循環

+0

這個解決方案看起來很穩固,雖然沒有{}的單行ifs是不好的做法。 –

+0

也是,$ name => $ last_name_id看起來像你可以直接調用$ last_name_id,但是因爲你使用了$ name-> last_name_id,所以我認爲你是這樣想的。也許$ name是一個對象。我不知道。 –

+0

是的,你可以辯論任何非{},最後總是不好的做法,我認爲。只是我想展示他將如何使用它,因爲他的原始沒有大括號。 –

0

我大概寫了一點不同,這是不正確的($ name不是一個對象)沿線的

$name->last_name_id 

東西:

$last_names = regapiGetLastNames(NULL, -1); 
$exclude = array('11196','11195','11198','11197'); 

foreach ($last_names as $name => $last_name_id) { 
    if(!in_array($last_name_id, $exclude)) print '<option value="'.$last_name_id.'">'.$name.'</option>'; 
}