while recorrer obtener indice index eliminar elementos elemento ejemplos buscar array agregar php arrays higher-order-functions built-in

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

array_intersect_key

<?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) { }