2011-12-23 14 views
14

Intento eliminar un prefijo en las teclas de matriz y todos los intentos fallan. Lo que quiero lograr es:Cómo eliminar el prefijo en las teclas de matriz

Tener: Array ([attr_Size] => 3 [attr_Colour] => 7)

Para obtener: Array ([Size] => 3 [Colour] => 7)

Su ayuda será muy apreciada ...

+6

Por lo que sólo desea eliminar 'attr_' de sus claves de matriz? ¿Qué tiene esto que ver con 'implode()'? ¿Debería 'attr_my_prop' convertirse en' my_prop', 'prop' o algo más? Lo más importante, ¿por qué? ¿Podemos ver tu código de "falla" por favor? –

Respuesta

3

Una de las maneras de conseguir: Array ([Size] => 3 [Colour] => 7) Desde su Having: Array ([attr_Size] => 3 [attr_Colour] => 7)

$new_arr = array(); 
foreach($Your_arr as $key => $value) { 

list($dummy, $newkey) = explode('_', $key); 
$new_arr[$newkey] = $value; 

} 

Si cree que habrá varios guiones en las teclas sólo reemplazar primera línea i nside foreach con list($dummy, $newkey) = explode('attr_', $key);

+0

Esto funciona de hecho. Muchas gracias. – user1113177

+2

Consulte a continuación para obtener una respuesta más preferible. –

+0

Esta no debe ser la respuesta aprobada de la OMI. Consulte a continuación para usar la función array_keys() más adecuada. Evita el ciclo en esta respuesta. Lo siento -1 voto negativo de mi parte. – Ligemer

4

Si entendí su pregunta, no tiene que usar implode() para obtener lo que desea.

define(PREFIX, 'attr_'); 

$array = array('attr_Size' => 3, 'attr_Colour' => 7); 

$prefixLength = strlen(PREFIX); 

foreach($array as $key => $value) 
{ 
    if (substr($key, 0, $prefixLength) === PREFIX) 
    { 
    $newKey = substr($key, $prefixLength); 
    $array[$newKey] = $value; 
    unset($array[$key]); 
    } 
} 

print_r($array); // shows: Array ([Size] => 3 [Colour] => 7) 
+0

¡Brillante! Trabajos. Ahora parece tan simple. Muchas gracias. – user1113177

+1

De nada. No te olvides de votar/aceptar las respuestas con las que te sientes satisfecho :) –

0

Aquí hay algo más para masticar que pueden reutilizarse para múltiples matrices en la aplicación que tienen diferentes prefijos clave. Esto sería útil si tiene claves prefijadas de Redis para reasignar o algo de esa naturaleza.

$inputArray = array('attr_test' => 'test', 'attr_two' => 'two'); 

/** 
* Used to remap keys of an array by removing the prefix passed in 
* 
* Example: 
* $inputArray = array('app_test' => 'test', 'app_two' => 'two'); 
* $keys = array_keys($inputArray); 
* array_walk($keys, 'removePrefix', 'app_'); 
* $remappedArray = array_combine($keys, $inputArray); 
* 
* @param $value - key value to replace, should be from array_keys 
* @param $omit - unused, needed for prefix call 
* @param $prefix - prefix to string replace in keys 
*/ 
function removePrefix(&$value, $omit, $prefix) { 
    $value = str_replace($prefix, '', $value); 
} 

// first get all the keys to remap 
$keys = array_keys($inputArray); 

// perform internal iteration with prefix passed into walk function for dynamic replace of key 
array_walk($keys, 'removePrefix', 'attr_'); 

// combine the rewritten keys and overwrite the originals 
$remappedArray = array_combine($keys, $inputArray); 

// see full output of comparison 
var_dump($inputArray); 
var_dump($remappedArray); 

Salida:

array(2) { 
    'attr_test' => 
    string(4) "test" 
    'attr_two' => 
    string(3) "two" 
} 
array(2) { 
    'test' => 
    string(4) "test" 
    'two' => 
    string(3) "two" 
} 
Cuestiones relacionadas