对于二维数组的操作问题,一般的做法是直接foreach,一个个的往一个数组变量里塞进行赋值,这种非常常见的做法,但这样的写法很影响性能,因为使用 PHP 原生的函数肯定比循环效率高。下面介绍如何使用原生的函数实现此需求。
事例数组
$arr = array(
0 => array(
'id' => 11,
'name' => 'username1',
'code' => '123456789',
),
1 => array(
'id' => 22,
'name' => 'username2',
'code' => '123456789',
),
2 => array(
'id' => 33,
'name' => 'username3',
'code' => '123456789',
)
);
1)获取索引”id”的集合,并且保存为 array(11,22,33)
原始写法:
foreach ($arr as $key => $value)
{
$list[] = $value['id'];
}
优化后:
$list = array();
$list = array_map('array_shift', $arr);
//php 版本要求,(PHP 5 >= 5.5.0)
$list = array();
$list = array_column($arr, 'id');
2)获取索引”name”的集合,并且保存为 array(‘username1’,’username2’,’username3’)
原始写法:
foreach ($arr as $key => $value)
{
$list[] = $value['name'];
}
优化后:
$list = array();
$list = array_reduce($arr, create_function('$v,$w', '$v[$w["id"]]=$w["name"];return $v;'));
打印结果:
array(
11 => 'username1',
22 => 'username2',
33 => 'username3',
);
3)在每个数组元素里面添加一个元素,或者重新赋值
原始写法:
foreach ($arr as $key => $value)
{
$arr[$key]['add_element'] = 1;
}
优化后:
array_walk($arr,function(&$item,$key){$item['add_element'] = 1;});
打印结果:
$arr = array(
0 => array(
'id' => 11,
'name' => 'username1',
'code' => '123456789',
'add_element'=>1
),
1 => array(
'id' => 22,
'name' => 'username2',
'code' => '123456789',
'add_element'=>1
),
2 => array(
'id' => 33,
'name' => 'username3',
'code' => '123456789',
'add_element'=>1
)
);