Assegnare il valore da un array associativo PHP in altro array
-
22-08-2019 - |
Domanda
Ho un $params
variabile che ottiene i dati dal database:
$params = mssql_fetch_array($result)
Per quanto ne so, è array associativo. Voglio un'altra $tempParams
array per contenere il valore di questo array. Posso assegnare utilizzando la seguente dichiarazione:
$tempParams = $params
Inoltre, ho bisogno di una singola istruzione di dichiarare e assegnare un valore a $ tempParams, o possono queste essere separato?
Ancora una domanda che vorrei chiedere è che la seguente affermazione è corretta; Mentre $ tempParams contiene valori;
$params['column1'] = $tempParams['newColumns']
Soluzione
Si,
$tempParams = $params;
copierà tutti i valori da $ params a $ tempParams.
$params['foo'] = 'bar';
echo $tempParams['foo']; //nothing
$tempParams = $params;
echo $tempParams['foo']; //'bar'
$params['foo'] = 'hai';
echo $tempParams['foo']; //still: 'bar'
Altri suggerimenti
Per quanto riguarda se l'array è associativo, leggere la documentazione sul mysql_fetch_array ()
Per quanto riguarda l'assegnazione va, in realtà si può mettere in una dichiarazione
$tempParams = $params = mysql_fetch_array( $result, MYSQL_ASSOC );
Questo semplice test dimostra che quando si fa un incarico del genere, entrambe le variabili sono copie separate e non riferimenti.
$a = $b = array( 1, 2, 3 );
$b[1] = 'x';
echo '<pre>';
print_r( $a );
print_r( $b );
echo '</pre>';
Sì, l'operatore = copierà la matrice esattamente.
È possibile verificare voi stessi:
// get the $params from DB
print_r ($params); // will output array contents
$tempParams = $params;
print_r ($tempParams); // must be the same as above
Non esiste una cosa come “dichiarando” le variabili in PHP, ma se si vuole dire che $ tempParams è un array da qualche parte prima di assegnare, si può fare in questo modo:
$tempParams = array ();
Questo renderà $ tempParams un array senza elementi al suo interno.
Per gli array, numerico e associativo, l'operatore = farà una copia della variabile. E entrambe le variabili sono completamente indipendenti l'uno dall'altro. Tuttavia, quando si tratta di oggetti, l'operatore = crea un riferimento all'oggetto, e entrambe le variabili puntare al esattamente lo stesso oggetto.
Sì, è possibile, ma che potrebbe provocare un qualche tipo di aliasing se hai a che fare con gli oggetti (a seconda di quale versione di PHP che si sta utilizzando).
Perché è che si desidera copiare la matrice? Non puoi lavorare con la stessa variabile originale ($ params)?