PHP二维数组根据键值对获取一组数组 (不使用foreach)

$user = array(  
    0 => array(  
        'id'    => 1,  
        'name'  => '张三',  
        'email' => 'zhangsan@sina.com',  
    ),  
    1 => array(  
        'id'    => 2,  
        'name'  => '李四',  
        'email' => 'lisi@163.com',  
    ),  
    2 => array(  
        'id'    => 5,  
        'name'  => '王五',  
        'email' => '10000@qq.com',  
    ),  
    ......  
); 

比如我想获取当id=2时,该数组的全部内容,不使用foreach,在PHP 5.3版本下

阅读 6.5k
7 个回答
$user = array(  
    0 => array(  
        'id'    => 1,  
        'name'  => '张三',  
        'email' => 'zhangsan@sina.com',  
    ),  
    1 => array(  
        'id'    => 2,  
        'name'  => '李四',  
        'email' => 'lisi@163.com',  
    ),  
    2 => array(  
        'id'    => 5,  
        'name'  => '王五',  
        'email' => '10000@qq.com',  
    )
);
$ids = array_column($user, 'id');
$new_user = array_combine($ids, $user);
var_dump($new_user[2]);

用array_filter也可以,但本质上还是循环

$test = array_filter(
    $user,
    function($item){
        if($item['id'] == '2'){
            return true;
        }
    }
);

不用foreach 还可以用for 和 array_map,但是foreach好像效率更高一点

大于php4

$arr = array_filter($test,function($val){
    return $val['id'] == 2
})

如果你能确认每个元素的id都唯一不重复,你可以先用foreach重构这个数组 用id作为这个数组的索引 然后用$arr[$id]的方式在别的地方取值

其实你用的函数也是帮你foreach了,大多数性能不如自己foreach的好

问题问的真的挺low。。。即使你用内置函数实现了,看上去挺干净,没有foreach,没有for
但是请问,不把数组遍历一遍你知道哪个内层数组是id=2的?
看大家还在这里忙着给你写答案,给大家给个赞

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏