PHP中foreach處理列表資料哪一種更好?

來源:互聯網
上載者:User
開發中經常需要對從資料庫中取出的列表資料進行處理,

看到的寫法有下面三種,都可以得到相同的結果,個人一直習慣使用第一種。

從可讀性和效能方面考慮哪一種更好?

列表資料如:

$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 ……

習慣用第一種方式

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.