2010-06-26 7 views
2

J'ai un tableau comme celui-ci:filtre un tableau

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

Je voudrais « filtre » le tableau pour obtenir un nouveau. Par exemple, je voudrais avoir un nouveau tableau avec seulement « category_2 » et « category_3 » comme ceci:

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

Comment puis-je obtenir ce résultat?

Répondre

2

Voir

Exemple:

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

print_r($new); 

sortie:

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

Lors de l'utilisation array_intersect le tableau retourné contiendra cat 1 et 4 évidemment.

+0

C'est une bonne solution, mais est-il possible de dire au script les éléments à "sauver" au lieu des éléments qui seront supprimés? – Pennywise83

+0

@ Pennywise voir la mise à jour. vous voulez 'array_intersect' dans ce cas. – Gordon

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

..might faire l'affaire

+0

mmm ... qui devrait fonctionner, mais je voudrais écrire une fonction où Je peux définir le nom des éléments que je veux enregistrer, ne pas exclure. Quelque chose comme ceci: my_function ('category_2, category_3', $ original_array); – Pennywise83

0

Utilisez preg_grep:

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

c'est une surcharge totale – Gordon

Questions connexes