2010-03-02 11 views
6

Ho 2 array.Elementi di array di dereference PHP

$result = array(); 
$row = array(); 

Gli elementi di riga sono tutti riferimenti e sono in costante cambiamento. Per ogni iterazione di $row voglio copiare i valori di di riga in una voce di $result e non i riferimenti.

Ho trovato alcune soluzioni ma sembrano tutte piuttosto orribili.

$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.

Esiste un modo più semplice per raggiungere questo obiettivo? Se no, quale sarebbe il modo più efficace?

Grazie.

EDIT: 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.

+0

questo potrebbe essere un duplicato, http://stackoverflow.com/questions/1190026/php-copying-array-elements -by-value-not-by-reference –

+0

Si occupa di oggetti. Sto trattando rigorosamente con gli array. – anomareh

+0

Se la gente ha messo in subboted la mia risposta, quindi hanno creduto che avessi ragione. Se non è il caso, allora molto probabilmente significa che non hai chiarito la tua domanda in un primo momento. Trovo piuttosto scortese da parte tua dire alle persone di non suggerire il mio tentativo di aiutarti, quindi non cercherò di approfondire ulteriormente. – zneak

risposta

4

Non sono sicuro di comprendere completamente la domanda, ma è possibile utilizzare 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); 
+0

sembra che la tua funzione funzionerebbe davvero e quello che ho suggerito non era corretto. – anomareh

2

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; 
} 
Problemi correlati