>  기사  >  백엔드 개발  >  PHP中foreach处理列表数据哪一种更好?

PHP中foreach处理列表数据哪一种更好?

WBOY
WBOY원래의
2016-07-06 13:52:59977검색

开发中经常需要对从数据库中取出的列表数据进行处理,

看到的写法有下面三种,都可以得到相同的结果,个人一直习惯使用第一种。

从可读性和性能方面考虑哪一种更好?

列表数据如:

<code>$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,
    ],
];</code>

写法1,原数组中修改:

<code>foreach($list as $k=>$v){
    if($v['gender']==0){
        $list[$k]['gender']='妖人';
    }else{
        $list[$k]['gender']='人';
    }
}</code>

写法2,原数组修改,使用引用:

<code>foreach($list as &$v){
    if($v['gender']==0){
       $v['gender']='妖人';
    }else{
       $v['gender']='人';
    }
}</code>

写法3,定义一个新的数组:

<code>
$data = [];
foreach($list as $k=>$v){
    if($v['gender']==0){
        $v['gender']='妖人';
    }else{
        $v['gender']='人';
    }
    $data[] = $v;
}</code>

回复内容:

开发中经常需要对从数据库中取出的列表数据进行处理,

看到的写法有下面三种,都可以得到相同的结果,个人一直习惯使用第一种。

从可读性和性能方面考虑哪一种更好?

列表数据如:

<code>$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,
    ],
];</code>

写法1,原数组中修改:

<code>foreach($list as $k=>$v){
    if($v['gender']==0){
        $list[$k]['gender']='妖人';
    }else{
        $list[$k]['gender']='人';
    }
}</code>

写法2,原数组修改,使用引用:

<code>foreach($list as &$v){
    if($v['gender']==0){
       $v['gender']='妖人';
    }else{
       $v['gender']='人';
    }
}</code>

写法3,定义一个新的数组:

<code>
$data = [];
foreach($list as $k=>$v){
    if($v['gender']==0){
        $v['gender']='妖人';
    }else{
        $v['gender']='人';
    }
    $data[] = $v;
}</code>

使用1比较多
虽然2的写法最简洁,但是foreach下引用是有坑的
你在foreach外如果再次使用$v这个变量,可能就把foreach最后一个值给变了,当然能保证不用的话是不会发生这种问题的

array_map

个人一般用写法一
写法二容易出问题

推荐引用的方式,即写法2

第二种要好一点吧,你都foreach出来了,本来就有个一维数组存在,干嘛还要再去list里面取呢。

select if(gender=0,'妖人','人') as gendername ……

习惯用第一种方式

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.