脚本宝典收集整理的这篇文章主要介绍了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,请注明来意。