Domanda

Sto lavorando con una serie di dati che ho cambiato i nomi di alcune chiavi degli array, ma voglio i dati per rimanere lo stesso in fondo ... Fondamentalmente io voglio essere in grado di mantenere i dati che sono nel array memorizzato nel DB, ma voglio aggiornare i nomi chiave dell'array ad esso associati.

In precedenza la matrice avrebbe guardato come questo: $var_opts['services'] = array('foo-1', 'foo-2', 'foo-3', 'foo-4');

Ora le chiavi dell'array non sono più prefisso "foo", ma piuttosto con "bar", invece. Così come posso aggiornare la variabile array di sbarazzarsi dei "Foos" e sostituirlo con "barre", invece?

In questo modo: $var_opts['services'] = array('bar-1', 'bar-2', 'bar-3', 'bar-4');

Sono già utilizzando if(isset($var_opts['services']['foo-1'])) { unset($var_opts['services']['foo-1']); } per sbarazzarsi dei Foos ... ho solo bisogno di capire come sostituire ogni foo con un bar.

Ho pensato di utilizzare str_replace su tutta la gamma, ma per il mio sgomento funziona solo su stringhe (Figura andare, eh) e non gli array.

È stato utile?

Soluzione

L'idea:

  1. Ottenere un elenco di tutte le chiavi degli array
  2. Modifica ognuno di loro come si sceglie
  3. Sostituire le chiavi esistenti con quelli modificati

Il codice:

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

Quello che fa in realtà è creare un nuovo array, che ha gli stessi valori come la matrice originale, ma in cui sono stati modificati i tasti.

Modifica :. Aggiornato secondo il commento di Kamil seguente

Altri suggerimenti

Per i valori che ci hai fornito     $ Var_opts [ 'servizi'] = 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']);

o se si desidera modificare le chiavi effettive

$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']);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top