Atribuir valor a partir de uma matriz associativa de php em outra matriz
-
22-08-2019 - |
Pergunta
Eu tenho um $params
variável que obtém dados do banco de dados:
$params = mssql_fetch_array($result)
Tanto quanto eu sei, é matriz associativa. Quero outra $tempParams
matriz para armazenar o valor dessa matriz. Posso atribuir-lo usando a seguinte declaração:
$tempParams = $params
Além disso, eu preciso uma única instrução para declarar e atribuir um valor a $ tempParams, ou estes podem ser separados?
Mais uma pergunta que eu gostaria de pedir é que seguinte declaração está correta; Enquanto $ tempParams contém valores;
$params['column1'] = $tempParams['newColumns']
Solução
Sim,
$tempParams = $params;
irá copiar todos os valores de $ params para US $ tempParams.
$params['foo'] = 'bar';
echo $tempParams['foo']; //nothing
$tempParams = $params;
echo $tempParams['foo']; //'bar'
$params['foo'] = 'hai';
echo $tempParams['foo']; //still: 'bar'
Outras dicas
Tanto quanto se ou não sua matriz é associativa, leia a documentação on mysql_fetch_array ()
Quanto atribuição vai, você realmente pode colocá-lo em uma instrução
$tempParams = $params = mysql_fetch_array( $result, MYSQL_ASSOC );
Esta simples teste revela que quando você faz um trabalho assim, ambas as variáveis ??são cópias separadas e não referências.
$a = $b = array( 1, 2, 3 );
$b[1] = 'x';
echo '<pre>';
print_r( $a );
print_r( $b );
echo '</pre>';
Sim, o operador = irá copiar a matriz exatamente.
Você pode verificar-se:
// get the $params from DB
print_r ($params); // will output array contents
$tempParams = $params;
print_r ($tempParams); // must be the same as above
Não há tal coisa como “declarar” variáveis ??em PHP, mas se você gostaria de dizer que US $ tempParams é um lugar matriz antes da atribuição, você pode fazê-lo como este:
$tempParams = array ();
Isso fará $ tempParams um array sem elementos dentro.
Para matrizes, numéricas e associativos, o operador = fará uma cópia da variável. E ambas as variáveis ??são completamente independentes um do outro. No entanto, quando se lida com objetos, o operador = cria uma referência ao objeto, e ambas as variáveis ??apontam para exatamente o mesmo objeto.
Sim, pode, mas isso poderia causar algum tipo de aliasing Se você está lidando com objetos (dependendo de qual versão do PHP você está usando).
Por que é que você quer copiar a matriz? você não pode trabalhar com a mesma variável original ($ params)?