开发中经常需要对从数据库中取出的列表数据进行处理,
看到的写法有下面三种,都可以得到相同的结果,个人一直习惯使用第一种。
从可读性和性能方面考虑哪一种更好?
列表数据如:
$list = [ [ 'uid'=>100, 'username'=>'test100', 'nickname'=>'php_1', 'gender'=>1, ], [ 'uid'=>200, 'username'=>'test200', 'nickname'=>'php_2', 'gender'=>2, ], [ 'uid'=>300, 'username'=>'test300', 'nickname'=>'php_3', 'gender'=>0, ],];
写法1,原数组中修改:foreach($list as $k=>$v){ if($v['gender']==0){ $list[$k]['gender']='妖人'; }else{ $list[$k]['gender']='人'; }}
写法2,原数组修改,使用引用:foreach($list as &$v){ if($v['gender']==0){ $v['gender']='妖人'; }else{ $v['gender']='人'; }}
写法3,定义一个新的数组:$data = [];foreach($list as $k=>$v){ if($v['gender']==0){ $v['gender']='妖人'; }else{ $v['gender']='人'; } $data[] = $v;}
回复内容: 开发中经常需要对从数据库中取出的列表数据进行处理,
看到的写法有下面三种,都可以得到相同的结果,个人一直习惯使用第一种。
从可读性和性能方面考虑哪一种更好?
列表数据如:
$list = [ [ 'uid'=>100, 'username'=>'test100', 'nickname'=>'php_1', 'gender'=>1, ], [ 'uid'=>200, 'username'=>'test200', 'nickname'=>'php_2', 'gender'=>2, ], [ 'uid'=>300, 'username'=>'test300', 'nickname'=>'php_3', 'gender'=>0, ],];
写法1,原数组中修改:foreach($list as $k=>$v){ if($v['gender']==0){ $list[$k]['gender']='妖人'; }else{ $list[$k]['gender']='人'; }}
写法2,原数组修改,使用引用:foreach($list as &$v){ if($v['gender']==0){ $v['gender']='妖人'; }else{ $v['gender']='人'; }}
写法3,定义一个新的数组:$data = [];foreach($list as $k=>$v){ if($v['gender']==0){ $v['gender']='妖人'; }else{ $v['gender']='人'; } $data[] = $v;}
使用1比较多
虽然2的写法最简洁,但是foreach下引用是有坑的
你在foreach外如果再次使用$v这个变量,可能就把foreach最后一个值给变了,当然能保证不用的话是不会发生这种问题的
array_map
个人一般用写法一
写法二容易出问题
推荐引用的方式,即写法2
第二种要好一点吧,你都foreach出来了,本来就有个一维数组存在,干嘛还要再去list里面取呢。
select if(gender=0,'妖人','人') as gendername ……
习惯用第一种方式