PHP数组的引用与值复制?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP数组的引用与值复制?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我错过了一些明显的东西.这是一个简单PHP,散落着调试回声:

function echo_rows(&$res) {
    $rows= array();
    while ($row= $res->fetch()) {
           echo $row['ccorID'] . "\r\n";
        $rows[]= $row;
           echo $rows[0]['ccorID'] . "\r\n";
    }

    echo "---.---\r\n";
    echo count($rows) . "\r\n";
    foreach($rows as $row) {
        echo $row['ccorID'] . "\r\n";
    }
    echo json_encode($rows);
}

这是我在回复中看到的内容

0
0
3
3
13
13
182
182
---.---
4
182
182
182
182

觉得很清楚: –

>我有4行数据
> $rows [] = $row;尽管它在这里说的是http://uk.php.net/manual/en/language.types.array.php,但它并没有执行价值复制

任何人都知道我需要做什么来获得$row的副本(这是一个关联数组)?

谢谢.

编辑:因为很多人都坚持要知道$res是什么,所以这是课程.我真的相信这更容易混淆而不是启发(因此我的OP遗漏).

class MysqLie_results {
    PRivate $stmt;
    private $paramArray= array(); 
    private $assocArray= array(); 

    public function __construct(&$stmt) {
        $this->stmt= $stmt;
        $Meta= $stmt->result_Metadata(); 

        while ($colData= $Meta->fetch_field()) {
            $this->paramArray[]= &$this->assocArray[$colData->name]; 
        }

        call_user_func_array(array($stmt,'bind_result'),$this->paramArray); 
        $Meta->close(); 
    } 

    public function __destruct() {
        $this->stmt->free_result();
    } 

    public function fetch() { 
        return $this->stmt->fetch()? $this->assocArray : false;
    } 
}

解决方法

我们来仔细看看

while ($colData= $Meta->fetch_field()) {
        $this->paramArray[]= &$this->assocArray[$colData->name]; 
    }

    call_user_func_array(array($stmt,$this->paramArray);

在那里你有你的参考,这是造成麻烦的.如果复制包含引用的数组,则结果仍然是包含引用的数组.

尝试

while ($row= $res->fetch()) {
  var_dump($row);

你会看到$row也包含引用. paramArray,assocArray和$row中的所有相应元素实际引用相同的值.因此当你调用return $this-> stmt-> fetch()时,它不仅影响paramArray而且影响所有这些引用,一直到$rows,因为$rows [] = $row;仍然只复制数组但不“取消引用”元素.

脚本宝典总结

以上是脚本宝典为你收集整理的PHP数组的引用与值复制?全部内容,希望文章能够帮你解决PHP数组的引用与值复制?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。