tengo una matriz que tiene este aspecto:¿La manera más fácil de eliminar claves de una matriz 2D?
array(
0 => array(
'key1' => 'a',
'key2' => 'b',
'key3' => 'c'
),
1 => array(
'key1' => 'c',
'key2' => 'b',
'key3' => 'a'
),
...
)
Necesito una función para obtener una matriz que contiene sólo una (variable) número de teclas, es decir reduce_array (array ('key1', 'key3')) ; debería devolver:
array(
0 => array(
'key1' => 'a',
'key3' => 'c'
),
1 => array(
'key1' => 'c',
'key3' => 'a'
),
...
)
¿Cuál es la forma más fácil de hacer esto? Si es posible sin ninguna función auxiliar adicional como array_filter o array_map, mis compañeros de trabajo ya se quejan de que use demasiadas funciones.
La matriz de origen siempre tendrá las claves dadas, por lo que no es necesario verificar la existencia.
Puntos de bonificación si los valores son únicos (las claves siempre estarán relacionadas entre sí, lo que significa que si key1 tiene valor a, entonces la otra clave siempre tendrá el valor b).
Mi solución actual, que funciona, pero es bastante torpe (incluso el nombre es horrible, pero no puede encontrar uno mejor):
function get_unique_values_from_array_by_keys(array $array, array $keys)
{
$result = array();
$found = array();
if (count($keys) > 0)
{
foreach ($array as $item)
{
if (in_array($item[$keys[0]], $found)) continue;
array_push($found, $item[$keys[0]]);
$result_item = array();
foreach ($keys as $key)
{
$result_item[$key] = $item[$key];
}
array_push($result, $result_item);
}
}
return $result;
}
Adición:
PHP versión 5.1.6 es.
muy agradable, @jemfinch. – karim79
Muy buena solución, parece justo lo que necesitaba, pero esperaré otras soluciones posibles antes de aceptar. – dbemerlin