foreach与&引用的学习

在foreach中循环时

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
unset($value);  // 最后取消掉引用 
var_dump($arr);  // $arr is now array(2, 4, 6, 8)
  • 此时输出$arr为array(2, 4, 6, 8);
$arr = array(1, 2, 3, 4);
foreach ($arr as $value) {
    $value = $value * 2;
}
unset($value);  // 最后取消掉引用 
var_dump($arr);  // $arr is now array(1, 2, 3, 4)
  • 此时输出$arr为array(1, 2, 3, 4);

进而衍生出不用额外的空间,对索引数组进行向前或向后移动一位的操作

<?php
class move
{
    public function before1(){
        $arr = array('a','b','c','d','e','f'); 
        foreach ($arr as $key => $value) {
            if($key == 0){
                $arr[(count($arr)-1)] = $value;
            }
            $value = &$arr[$key];
        }
        print_r($arr);
    }

    public function before2()
    {
        $arr = array('a','b','c','d','e','f');
        foreach ($arr as $key => $value) {
            if($key == 0){
                $arr[count($arr) -1] = $arr[0];
            }
            if($key-1>=0){
                $arr[$key-1] = $value;
            }
        }
        print_r($arr);
    }

    public function ahter1(){
        $arr = array('a','b','c','d','e','f');
        foreach ($arr as $key => $value) {
            if($key+1>=count($arr)){
                $arr[0] = $value;
            }else{
                $arr[$key+1] = $value;
            }
        }
        print_r($arr);
    }

    public function ahter2()
    {
        $arr = array('a','b','c','d','e','f');
        foreach ($arr as $key => $value) {
            if($key == 0){
                $arr[0] = $arr[count($arr) -1];
            }
            if($key+1<count($arr)){
                $arr[$key+1] = $value;
            }
        }
        print_r($arr);
    }

    public function ahter3()
    {
        $arr = array('a','b','c','d','e','f'); 
        foreach ($arr as $key => $value) {
            if($key == 0){
                $arr[1] = $arr['0'];
            }
            if($key + 2 < count($arr)){
                $value = &$arr[$key+2];
            }else{
                $value = &$arr[abs(count($arr)-$key-2)];
            }

        }
        print_r($arr);
    }
}

$res = new move;
$res->before1();
echo '<hr>';
$res->before2();
echo '<hr>';
$res->ahter1();
echo '<hr>';
$res->ahter2();
echo '<hr>';
$res->ahter3();

Array ( [0] => b [1] => c [2] => d [3] => e [4] => f [5] => a )
Array ( [0] => b [1] => c [2] => d [3] => e [4] => f [5] => a )
Array ( [0] => f [1] => a [2] => b [3] => c [4] => d [5] => e )
Array ( [0] => f [1] => a [2] => b [3] => c [4] => d [5] => e )
Array ( [0] => f [1] => a [2] => b [3] => c [4] => d [5] => e )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值