開發中經常需要對從資料庫中取出的列表資料進行處理,
看到的寫法有下面三種,都可以得到相同的結果,個人一直習慣使用第一種。
從可讀性和效能方面考慮哪一種更好?
列表資料如:
$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 ……
習慣用第一種方式