【问题标题】:Assign value from one associative array of php into another array将值从 php 的一个关联数组分配到另一个数组
【发布时间】:2025-12-12 07:10:01
【问题描述】:

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

$params = mssql_fetch_array($result)

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

$tempParams = $params

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

我想再问一个问题,下面的说法是正确的; 而 $tempParams 包含值;

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

【问题讨论】:

    标签: php declaration variable-assignment associative-array


    【解决方案1】:

    是的,

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

    【讨论】:

    • 谢谢你,你的回复对我有用。我什至没有编译器 php。但只要按照所有回复并纠正逻辑......
    【解决方案2】:

    至于您的数组是否具有关联性,请阅读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>';
    

    【讨论】:

    • 直到您分配给$b[1],在您的示例中,$a$b 不是单独的副本。
    【解决方案3】:

    是的,= 运算符将完全复制数组。

    你可以自己检查一下:

    // 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 成为一个内部没有元素的数组。

    【讨论】:

    • 下面的陈述对我真的很有帮助。 $tempParams = 数组 ();
    【解决方案4】:

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

    【讨论】:

    • 根据我的研究,在分配期间不会复制数组,直到更新一个或另一个变量。它被称为“写时复制”。
    【解决方案5】:

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

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

    【讨论】:

    • 我想忽略数据库中的一些列,因为有人添加了新列。虽然我想零售表的旧值,以防万一用户访问任何旧记录..
    最近更新 更多