Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 php数组传值调用与传址调用

php数组传值调用与传址调用

发布时间:2018-05-09   编辑:www.jquerycn.cn
本文介绍了php数组传值调用与php数组传址调用的相关内容,主体方法中传递一个数组给某个方法,在该方法内修改了数组的某个值;回到主方法中会发现数组已经发生了改变,感兴趣的朋友参考下。

在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) ); 
            } 
        } 
    } 

 

控制台输出结果: 
 

++++++++++++++++++++++++ 
c   werq_0 
a   0_ajkcz 
c   werq_1 
a   1_ajkcz 
c   werq_2 
a   2_ajkcz 
++++++++++++++++++++++++ 
c   werq_0 
a   0________ 
c   werq_1 
a   1________ 
c   werq_2 
a   2________ 
++++++++++++++++++++++++ 
c   werq_0 
a   0________ 
c   werq_1 
a   1________ 
c   werq_2 
a   2________ 
 

而在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中传值与传引用的区别
php 文件上传实例剖析
php serialize与unserialize语法
PHP 传引用调用的实例解析
php使用ftp下载文件的简单例子
C 引用方式调用函数
有关php变量引用、函数传址以及对象引用的实例解析
C语言中数组名作为参数实现函数传递
Golang语言基础教程:函数的参数

关键词: php数组  数组   
[关闭]