2010-06-26 223 views
2

我有一個數組是這樣的:濾波器陣列

$categories_array = array(
[0] => 'category_1', 
[1] => 'category_2', 
[2] => 'category_3', 
[3] => 'category_4' 
) 

我想「過濾器」的陣列來獲得一個新的。例如,我想有隻「category_2」這樣一個新的陣列和「category_3」:

$new_categories_array = array(
[1] => 'category_2', 
[2] => 'category_3', 
) 

我怎樣才能做到這一點的結果?

回答

2

實施例:

$original = array('category_1','category_2','category_3','category_4'); 
$new  = array_diff($original, array('category_1', 'category_4')); 

print_r($new); 

輸出:

Array 
(
    [1] => category_2 
    [2] => category_3 
) 

當使用array_intersect返回的數組將包含貓1和4明顯。

+0

這是一個很好的解決方案,但它可以告訴腳本的元素「保存」,而不是將被刪除的元素? – Pennywise83 2010-06-26 15:28:48

+0

@Pennywise看更新。在這種情況下你想要'array_intersect'。 – Gordon 2010-06-26 15:30:02

3
unset($new_categories_array[0]); 
unset($new_categories_array[3]);

..might做的伎倆

+0

嗯...應該工作,但我想編寫一個函數,其中我可以設置要保存的元素的名稱,而不是排除。 類似這樣的: my_function('category_2,category_3',$ original_array); – Pennywise83 2010-06-26 15:05:49

0

使用preg_grep

$new_categories_array = preg_grep('/category_[23]/', $categories_array); 
+1

這是完全過量的 – Gordon 2010-06-26 15:30:44