str_replace () e strpos () per gli array?
-
26-09-2019 - |
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.
Soluzione
L'idea:
- Ottenere un elenco di tutte le chiavi degli array
- Modifica ognuno di loro come si sceglie
- 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']);