2011-04-01 3 views
2

J'ai une gamme d'articlesspliting un tableau sans foreach

$arr1 = Array(266=>"foo",178=>"bar",3="foobar"); 

puis j'ai un de tableau de nombres comme celui-ci

$arr2 = Array(0 => 266, 1 => 178); 

et donc ce que je veux faire est un tableau divisé un dans deux tableaux

où les valeurs de arr2 de $ qui correspondent à l'indice de arr1 $ sont transférés vers un nouveau tableau, donc je suis parti avec

$arr1 = Array(3="foobar"); 

$arr2= Array(266=>"foo",178=>"bar"); 

que dit que je sais que je pouvais le faire avec une boucle foreach mais je me demande si cela est une façon plus simple et plus rapide à faire

quelque chose array_diff serait pourrais mais je ne pense pas que cela fonctionnera

Répondre

2

Essayez:

$arr1 = array(266=>"foo",178=>"bar",3=>"foobar"); 
$arr2 = array(0 => 266, 1 => 178); 

$tmp = array_diff_key ($arr1, array_flip($arr2)); 
$arr2 = array_diff($arr1,$tmp); 
$arr1 = $tmp; 
+0

très gentil merci! cela fonctionne – mcgrailm

+0

+1, c'est beaucoup plus simple que mon approche :) –

0
$arr2=array_interest($arr1,array_flip($arr2)); 
$arr1=array_diff($arr1, $arr2); 
+0

Erreur fatale: Appel à array_interest undefined function() – mcgrailm

+0

je pense qu'il aurait pu signifier array_intersect. Je n'ai pas testé, mais ça pourrait bien marcher :) –

+0

@Berry Langerak que nolonger me donne l'erreur mais il ne donne pas les résultats corrects – mcgrailm

0

Cela devrait faire ce que vous voulez:

<?php 
$arr1 = array( 
    266 => "foo", 
    178 => "bar", 
    3 => "foobar" 
); 

$arr2 = array(
    0 => 266, 
    1 => 178 
); 

$foo = array_filter( 
    array_flip($arr1), 
    function($key) use ($arr2) { 
     return in_array($key, $arr2); 
    } 
); 

var_dump(array_flip($foo)); 

les deux années array_flip sont là parce que array_filter ne prendra la valeur, pas la clé. En fait, je ne suis pas sûr que ce soit plus efficace ou moins efficace que ça, mais vous devrez tester.

+0

donne les résultats corrects pour arr2 et je suppose que je devrais utiliser array_diff_assoc sur arr1 et arr2? – mcgrailm