PHP elementi dell'array dereferenziamento
-
23-09-2019 - |
Domanda
Ho 2 array.
$result = array();
$row = array();
elementi di riga sono tutti i riferimenti ed è in continua evoluzione. Per ogni iterazione del $row
voglio copiare i Valori di riga in una voce di $result
e non i riferimenti.
Ho trovato un paio di soluzioni, ma tutti sembrano piuttosto terribile.
$result[] = unserialize(serialize($row));
$result[] = array_flip(array_flip($row));
Sia del lavoro di cui sopra, ma sembra come un sacco di codice inutile e brutto solo per copiare il contenuto di un array di riferimenti per valore, invece di copiare i riferimenti stessi.
C'è un modo più pulito per ottenere questo risultato? Se non quello che sarebbe il modo più efficiente sia?
Grazie.
Modifica Come suggerito di seguito qualcosa come:
function dereference($ref) {
$dref = array();
foreach ($ref as $key => $value) {
$dref[$key] = $value;
}
return $dref;
}
$result[] = dereference($row);
funziona anche, ma sembra altrettanto brutto.
Soluzione
Non sono sicuro ho completamente capito la domanda, ma si può usare la ricorsione?
function array_copy($source) {
$arr = array();
foreach ($source as $element) {
if (is_array($element)) {
$arr[] = array_copy($element);
} else {
$arr[] = $element;
}
}
return $arr;
}
$result = array();
$row = array(
array('a', 'b', 'c'),
array('d', 'e', 'f')
);
$result[] = array_copy($row);
$row[0][1] = 'x';
var_dump($result);
var_dump($row);
Altri suggerimenti
Estensione della funzione di cui sopra come segue risolto un problema che ho avuto:
function array_copy($source) {
$arr = array();
foreach ($source as $element) {
if (is_array($element)) {
$arr[] = array_copy($element);
} elseif (is_object($element)) {
// make an object copy
$arr[] = clone $element;
} else {
$arr[] = $element;
}
}
return $arr;
}