1

我有一个$params从数据库中获取数据的变量:

$params = mssql_fetch_array($result)

据我所知,它是关联数组。我想要另一个数组$tempParams来保存这个数组的值。我可以使用以下语句分配它:

$tempParams = $params

此外,我是否需要一个语句来声明并为 $tempParams 赋值,或者这些可以分开吗?

我想问的另一个问题是以下陈述是正确的;虽然 $tempParams 包含值;

$params['column1'] = $tempParams['newColumns']
4

5 回答 5

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' 
于 2009-03-31T18:01:52.063 回答
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>';
于 2009-03-31T18:07:18.090 回答
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 成为一个内部没有元素的数组。

于 2009-03-31T18:07:39.663 回答
1

对于数组、数字和关联数组,= 运算符将复制变量。并且这两个变量完全相互独立。但是,在处理对象时,= 运算符会创建对该对象的引用,并且两个变量都指向完全相同的对象。

于 2009-03-31T18:38:06.017 回答
0

是的,您可以,但是如果您正在处理对象(取决于您使用的 PHP 版本),这可能会导致某种别名。

为什么要复制数组?你不能使用相同的原始变量($params)吗?

于 2009-03-31T18:00:43.177 回答