PHP: comment comparer des clés dans un tableau avec des valeurs dans un autre, et retourner des correspondances?

j'ai deux tables:

$array_one = array('colorZero'=>'black', 'colorOne'=>'red', 'colorTwo'=>'green', 'colorThree'=>'blue', 'colorFour'=>'purple', 'colorFive'=>'golden');

$array_two = array('colorOne', 'colorTwo', 'colorThree');

je veux un tableau de $array_one qui ne contient que les couples key-value dont les clés sont des membres de $array_two (soit en faisant un nouveau tableau ou en supprimant le reste des éléments de l' $array_one)

Comment puis-je faire cela?

j'ai regardé dans array_diff et array_intersect, mais ils comparent les valeurs avec les valeurs, et pas les valeurs d'un tableau avec les clés de l'autre.

10
demandé sur Solace 2014-08-24 17:35:29

4 réponses

Si je suis à la compréhension de cette correctement:

Retour d'un nouveau tableau:

$array_new = [];
foreach($array_two as $key)
{
    if(array_key_exists($key, $array_one))
    {
        $array_new[$key] = $array_one[$key];
    }
}

Décapage de $array_one:

foreach($array_one as $key => $val)
{
    if(array_search($key, $array_two) === false)
    {
        unset($array_one[$key]);
    }
}
3
répondu Skarpi Steinthorsson 2014-08-24 14:14:25

à partir de PHP 5.1 il y a array_intersect_key (manuel).

il suffit de retourner le second tableau de clé=>valeurvaleur=>cléarray_flip() et ensuite comparer les clés.

donc pour comparer les tableaux de OP, cela ferait:

$result = array_intersect_key( $array_one , array_flip( $array_two ) );

pas besoin du tout de boucler les tableaux.

14
répondu Michel 2018-01-12 11:04:49

Dis-moi si ça marche:

for($i=0;$i<count($array_two);$i++){
  if($array_two[$i]==key($array_one)){
     $array_final[$array_two[$i]]=$array_one[$array_two[$i]];
     next($array_one);
  }
}
0
répondu garry towel 2014-08-24 14:44:31

<?php 
$array_one = array('colorZero'=>'black', 'colorOne'=>'red', 'colorTwo'=>'green', 'colorThree'=>'blue', 'colorFour'=>'purple', 'colorFive'=>'golden');

$array_two = array('colorOne', 'colorTwo', 'colorThree');

print_r(array_intersect_key($array_one, array_flip($array_two))); 
?> 
0
répondu Reimi Beta 2017-11-10 09:11:56