recorrer - Función de matriz PHP que devuelve un subconjunto para claves dadas
php array key value (3)
$ret = array_filter($myArray, function ($key) { return in_array($key, $keys); }, ARRAY_FILTER_USE_KEY);
Estoy buscando una función de matriz que hace algo como esto:
$myArray = array(
''apple''=>''red'',
''banana''=>''yellow'',
''lettuce''=>''green'',
''strawberry''=>''red'',
''tomato''=>''red''
);
$keys = array(
''lettuce'',
''tomato''
);
$ret = sub_array($myArray, $keys);
donde $ ret es:
array(
''lettuce''=>''green'',
''tomato''=>''red''
);
No tengo ningún problema en escribirlo por mi cuenta, me gustaría evitar el bucle foreach y adoptar una función integrada o una combinación de funciones integradas. Me parece que es una operación de matriz común y general: me sorprendería si un bucle es la única opción.
Esto funciona:
function sub_array(array $haystack, array $needle)
{
return array_intersect_key($haystack, array_flip($needle));
}
$myArray = array(
''apple''=>''red'',
''banana''=>''yellow'',
''lettuce''=>''green'',
''strawberry''=>''red'',
''tomato''=>''red''
);
$keys = array(
''lettuce'',
''tomato''
);
$ret = sub_array($myArray, $keys);
var_dump($ret);
Puede usar array_intersect_key, pero usa una segunda matriz con claves y valores. Calcula la intersección de matrices usando claves para comparación
<?php
$array1 = array(''blue'' => 1, ''red'' => 2, ''green'' => 3, ''purple'' => 4);
$array2 = array(''green'' => 5, ''blue'' => 6, ''yellow'' => 7, ''cyan'' => 8);
$array3 = array(''green'' => '''', ''blue'' => '''', ''yellow'' => '''', ''cyan'' => '''');
$array4 = array(''green'', ''blue'', ''yellow'', ''cyan'');
var_dump(array_intersect_key($array1, $array2));
var_dump(array_intersect_key($array1, $array3));
var_dump(array_intersect_key($array1, $array4));
?>
El ejemplo anterior dará como resultado:
array(2) {
["blue"]=>
int(1)
["green"]=>
int(3)
}
array(2) {
["blue"]=>
int(1)
["green"]=>
int(3)
}
array(0) {
}