我有一个变量$params
,它从数据库中获取数据:
$params = mssql_fetch_array($result)
据我所知,它是关联数组。我想要另一个数组$tempParams
来保存这个数组的值。我可以使用以下语句分配它:
$tempParams = $params
另外,我是否需要一个语句来声明并为$ tempParams赋值,还是可以将它们分开?
我想问的另一个问题是以下陈述是正确的; 虽然$ tempParams包含值;
$params['column1'] = $tempParams['newColumns']
答案 0 :(得分:5)
是的,
$tempParams = $params;
将所有值从$ params复制到$ tempParams。
$params['foo'] = 'bar';
echo $tempParams['foo']; //nothing
$tempParams = $params;
echo $tempParams['foo']; //'bar'
$params['foo'] = 'hai';
echo $tempParams['foo']; //still: 'bar'
答案 1 :(得分:1)
至于您的数组是否具有关联性,请阅读mysql_fetch_array()
上的文档就任务而言,你实际上可以把它放在一个陈述中
$tempParams = $params = mysql_fetch_array( $result, MYSQL_ASSOC );
这个简单的测试显示,当您执行这样的赋值时,两个变量都是单独的副本而不是引用。
$a = $b = array( 1, 2, 3 );
$b[1] = 'x';
echo '<pre>';
print_r( $a );
print_r( $b );
echo '</pre>';
答案 2 :(得分:1)
是的,=运算符将完全复制数组。
你可以自己检查:
// get the $params from DB
print_r ($params); // will output array contents
$tempParams = $params;
print_r ($tempParams); // must be the same as above
在PHP中没有“声明”变量这样的东西,但是如果你想在分配之前说$ tempParams是一个数组,你可以这样做:
$tempParams = array ();
这将使$ tempParams成为一个没有元素的数组。
答案 3 :(得分:1)
对于数组,数字和关联,=运算符将复制变量。两个变量完全相互独立。但是,在处理对象时,=运算符会创建对象的引用,并且两个变量都指向完全相同的对象。
答案 4 :(得分:0)
是的,你可以,但如果你正在处理对象(取决于你正在使用的PHP版本),这可能会导致某种别名。
为什么要复制数组?你不能使用相同的原始变量($ params)?