第六行代码,哪个逗号啥意思?

@Ta 2018-06-21发布,2018-06-21修改 6228点击
<?php
function bubbleSort($arr) {
	for($i=0; $i<count($arr)-1; $i++) {
		for($j=0; $j<count($arr)-1-$i; $j++) {
			if($arr[$j] > $arr[$j+1]) {
				$arr[$j] = [$arr[$j+1], $arr[$j+1] = $arr[$j]][0];
			}
		}
	}
	return $arr;
}

var_dump(bubbleSort([9,8,7,6,5,4,3,2,1]));
回复列表(11|隐藏机器人聊天)
  • @Ta / 2018-06-22 / /

    看错了

    红米 Note4X 标配版(黑色)

  • @Ta / 2018-06-21 / /
    被禁言
    用户被禁言,发言自动屏蔽。
  • @Ta / 2018-06-21 / /

    @NowTime,涨知识了
    残缺的记忆,美好的回忆(https://76wp.cn)

  • @Ta / 2018-06-21 / /
    @NowTime,涨知识了,谢谢大佬。但是跑起来不对啊?
  • @Ta / 2018-06-21 / /
    第七行多了个  ] ?
  • @Ta / 2018-06-22 / /
    @大尨,连接符号
  • @Ta / 2018-06-22 / /
    相当于这样
    <?php
    
    function bubbleSort($arr) {
    
    	for($i=0; $i<count($arr)-1; $i++) {
    
    		for($j=0; $j<count($arr)-1-$i; $j++) {
    
    			if($arr[$j] > $arr[$j+1]) {
    				$temp = $arr[$j];
    				$arr[$j] = $arr[$j+1];
    				$arr[$j+1] = $temp;
    
    			}
    
    		}
    
    	}
    
    	return $arr;
    
    }
    var_dump(bubbleSort([9,8,7,6,5,4,3,2,1]));
    
    
    


    $arr[$j] = [$arr[$j+1], $arr[$j+1] = $arr[$j]][0]; 是一种简化的交换两个数组元素的方法
    [$arr[$j+1], $arr[$j+1] = $arr[$j]]这是一个数组, 逗号分隔的是两个元素
  • @Ta / 2018-06-22 / /
    @石头会飞翔,写法有点高深了。。。
  • @Ta / 2018-06-24 / /

    <!-- markdown -->
    哦,我终于理解了,其实是这样的:

    $arr[$j] = array( $arr[$j+1], $arr[$j+1] = $arr[$j] )[0];
    

    php5.4开始可以用 [a, b] 代替 array(a, b),并且允许对返回的数组直接取元素,所以array(a, b)[0][a, b][0]都是允许的。

    而这个语句的效果就是,交换$arr[$j]$arr[$j+1]的值

    但其实他可以用

    list($arr[$j], $arr[$j+1]) = array($arr[$j+1], $arr[$j]);
    

    在PHP7.2这可以写成

    [ $arr[$j], $arr[$j+1] ] = [ $arr[$j+1], $arr[$j] ];
    

    比他的好看多了吧

  • @Ta / 2018-06-24 / /
    @老虎会游泳,好吧,大佬什么懂的???手册上有?
添加新回复
回复需要登录