php之 foreach 使用 引用& $value . 使用 unset($value)

1.知识点:

 2. 例子

2.1 例子1 .

 $arr 引用循环, 赋值变量是 &$v ,第一个循环使用后 ,没有 使用unset($v) , 

$arr2 正常循环, 赋值变量是 $v ,  第二个循环 也 使用 $v 这个变量

<?php


$arr = array("a", "b", "c");
$arr2 = array("d", "e", "f");

foreach($arr as &$v)
{
    $v .= 1;

}

echo "<pre>";
var_dump($arr);
var_dump($arr2);

foreach($arr2 as $v)
{
    $v .= 2;
}
var_dump($arr);
var_dump($arr2);

 ?>

注意:红色部分:

1 .循环 $arr 后 ,  $arr的值 发生变化,   注意最后一个值是 引用.

2. 第二次循环$arr2;  可以看到 改变的是 $arr的值 ,最后一个值 从 c1 变成了 f2 , 同时 仍然保持着  引用 &string(2)  "f2";

          此时 $arr2 的值没有发生变化.

2.2 例子2

$arr1 引用循环 ,  赋值变量是 &$v , 没有 unset($v)

$arr2正常循环 , 赋值变量是  &v2

<?php


$arr = array("a", "b", "c");
$arr2 = array("d", "e", "f");

foreach($arr as &$v)
{
    $v .= 1;

}

echo "<pre>";
var_dump($arr);
var_dump($arr2);

foreach($arr2 as $v2)
{
    $v2 .= 2;
}
var_dump($arr);
var_dump($arr2);

 ?>

 

 此时$arr2 循环后 ,  $arr的值没有变化, 但是最后一个值 仍然保持引用, 同时 $arr2 的值 也没有发生变化.

-----------------------------

2.3 例子3.

$arr 引用循环, &$v,   unset($v);

$arr2 正常循环,  $v

<?php


$arr = array("a", "b", "c");
$arr2 = array("d", "e", "f");

foreach($arr as &$v)
{
    $v .= 1;

}

echo "<pre>";
var_dump($arr);
var_dump($arr2);

unset($v);

var_dump($arr);
var_dump($arr2);

foreach($arr2 as $v)
{
    $v .= '2';
}
var_dump($arr);
var_dump($arr2);

 ?>

 

 第一个红色部分是  $arr 循环后 ,没有 使用  unset($v);

第二个红色部分 是 $arr 循环后,  使用了 unset($v);

第三个红色部分 是 $arr2 循环.

2.4 例子4

$arr 引用传值,   &$v

$arr2 正常使用,  $v, 但是 通过函数调用

<?php


$arr = array("a", "b", "c");
$arr2 = array("d", "e", "f");

foreach($arr as &$v)
{
    $v .= 1;

}

echo "<pre>";
var_dump($arr);
var_dump($arr2);

function testArr2($array)
{
    foreach ($array as $v) {
        $v .= 2;
    }

    return $array;
}

var_dump($arr);
var_dump($arr2);
var_dump(testArr2($arr2));

 ?>

 测试 : 两次循环后 $arr 的值 是相同的, 当保持着 引用

总结:

  使用 &$v之后,  最好使用 unset($v) 删掉 ;

  或者 下一次 循环的时候 不要 使用 $v,  可以使用 $v2, $v3.

  或者 参见 2-4 ,通过函数调用.

猜你喜欢

转载自blog.csdn.net/qq_16059847/article/details/82531659
今日推荐