2010-05-12 7 views
1

Je travaille avec un tableau de données que j'ai changé les noms de certaines clés de tableau, mais je veux que les données restent les mêmes fondamentalement ... Fondamentalement, je veux être en mesure de conserver les données qui sont dans le tableau stocké dans la base de données, mais je souhaite mettre à jour les noms de clé de tableau qui lui sont associés.str_replace() et strpos() pour les tableaux?

Auparavant, le tableau aurait ressemblé à ceci: $var_opts['services'] = array('foo-1', 'foo-2', 'foo-3', 'foo-4');

maintenant les clés du tableau ne sont plus préfixés par « foo », mais plutôt « bar » à la place. Alors, comment puis-je mettre à jour la variable tableau pour se débarrasser des "foos" et remplacer par "barres" à la place?

comme ceci: $var_opts['services'] = array('bar-1', 'bar-2', 'bar-3', 'bar-4');

J'utilise déjà if(isset($var_opts['services']['foo-1'])) { unset($var_opts['services']['foo-1']); } pour se débarrasser des foos ... J'ai juste besoin de savoir comment remplacer chaque foo avec un bar.

Je pensais que j'utiliserais str_replace sur tout le tableau, mais à mon grand désarroi cela ne fonctionne que sur les chaînes (allez figure, heh) et non sur les tableaux.

+1

note de côté: avec le code que vous avez fourni, le tableau var_opts de $ [ 'services'] ne possède pas toutes les « foo-x 'chaînes comme des clés, mais en tant que valeurs..les clés sont réellement 0, 1, 2, ... –

Répondre

1

L'idée:

  1. obtenir une liste de toutes les clés du tableau
  2. Modifier chacun d'eux que vous choisissez
  3. Remplacer les clés existantes avec celles modifiées

Le code:

$keys = array_keys($arr); 
$values = array_values($arr); 
$new_keys = str_replace('foo', 'bar', $keys); 
$arr = array_combine($new_keys, $values); 

Wha En fait, cela crée un nouveau tableau qui a les mêmes valeurs que votre tableau original, mais dans lequel les clés ont été changées.

Édition: mise à jour selon le commentaire de Kamil ci-dessous.

+0

haha, intelligent! Merci beaucoup, très pratique. – Josh

+1

Belle technique! Vous pouvez également faire str_replace() sur les valeurs de tableau sans boucle en passant le tableau de la chaîne comme troisième argument: str_replace ('foo', 'bar', $ keys); Ainsi, vous pouvez avoir un oneliner. ;-) –

+0

@Kamil belle prise, je vais mettre à jour la réponse pour l'utiliser. – Jon

0

Pour les valeurs que vous avez fournies $ var_opts ['services'] = array ('foo-1', 'foo-2', 'foo-3', 'foo-4');

var_dump($var_opts['services']); 

foreach($var_opts['services'] as &$val) { 
    $val = str_replace('foo', 'bar', $val); 
} 
unset($val); 

var_dump($var_opts['services']); 

ou si vous souhaitez modifier les touches réelles

$var_opts['services'] = array('foo-1' => 1, 'foo-2' => 2, 'foo-3' => 3, 'foo-4' => 4); 
var_dump($var_opts['services']); 
foreach($var_opts['services'] as $i => $val) { 
    unset($var_opts['services'][$i]); 
    $i = str_replace('foo', 'bar', $i); 
    $var_opts['services'][$i] = $val; 
} 

var_dump($var_opts['services']);