首页 / PHP / php的数组传值调用与传址调用
php的数组传值调用与传址调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php的数组传值调用与传址调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3558字,纯文字阅读大概需要6分钟。
内容图文
在java中数组的调用默认是是传址调用:主体方法中传递一个数组给某个方法,在该方法内修改了数组的某个值;回到主方法中会发现数组已经发生了改变;测试代码:
public class ArrayTest { public static void main(String[] args){ Map[] maparray=new Map[3]; for (int i = 0; i < maparray.length; i++) { Map<String,String> map=new HashMap<String,String>(); map.put("a", i+"_ajkcz"); map.put("c", "werq_"+i); maparray[i]=map; } System.out.println("++++++++++++++++++++++++"); for (int i = 0; i < maparray.length; i++) { Map<String,String> map=maparray[i]; Iterator it=map.keySet().iterator(); while(it.hasNext()){ String key=(String) it.next(); System.out.println(key+"\t"+map.get(key) ); } } System.out.println("++++++++++++++++++++++++"); new ArrayCharge().printAndChangeArray(maparray); System.out.println("++++++++++++++++++++++++"); for (int i = 0; i < maparray.length; i++) { Map<String,String> map=maparray[i]; Iterator it=map.keySet().iterator(); while(it.hasNext()){ String key=(String) it.next(); System.out.println(key+"\t"+map.get(key) ); } } } } class ArrayCharge { public void printAndChangeArray(Map[] maparray){ for (int i = 0; i < maparray.length; i++) { Map<String,String> map=maparray[i]; map.put("a",i+"________"); } for (int i = 0; i < maparray.length; i++) { Map<String,String> map=maparray[i]; Iterator it=map.keySet().iterator(); while(it.hasNext()){ String key=(String) it.next(); System.out.println(key+"\t"+map.get(key) ); } } } } 控制台输出结果: ++++++++++++++++++++++++ cwerq_0 a0_ajkcz cwerq_1 a1_ajkcz cwerq_2 a2_ajkcz ++++++++++++++++++++++++ cwerq_0 a0________ cwerq_1 a1________ cwerq_2 a2________ ++++++++++++++++++++++++ cwerq_0 a0________ cwerq_1 a1________ cwerq_2 a2________
而在php中,数组的调用默认是传值调用,在字方法中修改了数组,在父方法中无法察觉
测试代码:
<?php $arraytest=array(); for($i=0;$i<3;$i++){ $child=array(); $child['keystr']='key'.$i; $child['valuestr']='value'.$i; $arraytest[]=$child; } print_r($arraytest); print_r("+++++++++++++++++++++++++"); for($i=0;$i<count($arraytest);$i++){ $child=$arraytest[$i]; $child['valuestr']="_________".$i; } print_r($arraytest); print_r("+++++++++++++++++++++++++"); ?>
控制台输出:
Array ( [0] => Array ( [keystr] => key0 [valuestr] => value0 ) [1] => Array ( [keystr] => key1 [valuestr] => value1 ) [2] => Array ( [keystr] => key2 [valuestr] => value2 ) ) +++++++++++++++++++++++++ Array ( [0] => Array ( [keystr] => key0 [valuestr] => value0 ) [1] => Array ( [keystr] => key1 [valuestr] => value1 ) [2] => Array ( [keystr] => key2 [valuestr] => value2 ) ) +++++++++++++++++++++++++
如果希望在php中也能类似java中传数组参数给字方法,字方法处理完成后父方法中数组也跟随改变则需要在传递参数时不传递值而是传递值的指针,例如p的值是100,即$p=100;在传递p给字方法时需要传递的参数则为“&$p”
测试代码:
<?php $arraytest=array(); for($i=0;$i<3;$i++){ $child=array(); $child['keystr']='key'.$i; $child['valuestr']='value'.$i; $arraytest[]=$child; } print_r($arraytest); print_r("+++++++++++++++++++++++++"); for($i=0;$i<count($arraytest);$i++){ $child=&$arraytest[$i]; //注意这里加了一个指针符号,代表是传址调用 $child['valuestr']="_________".$i; } print_r($arraytest); print_r("+++++++++++++++++++++++++"); ?>
控制台输出:
Array ( [0] => Array ( [keystr] => key0 [valuestr] => value0 ) [1] => Array ( [keystr] => key1 [valuestr] => value1 ) [2] => Array ( [keystr] => key2 [valuestr] => value2 ) ) +++++++++++++++++++++++++ Array ( [0] => Array ( [keystr] => key0 [valuestr] => _________0 ) [1] => Array ( [keystr] => key1 [valuestr] => _________1 ) [2] => Array ( [keystr] => key2 [valuestr] => _________2 ) )
内容总结
以上是互联网集市为您收集整理的php的数组传值调用与传址调用全部内容,希望文章能够帮你解决php的数组传值调用与传址调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。