PHP 获取二维数组中某个key的集合

对于二维数组的操作问题,一般的做法是直接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
    ) 
);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用嵌套的列表推导式来实现删除二维列表指定元素的操作。具体步骤如下: 1. 遍历二维列表的每一个子列表; 2. 在每个子列表查找指定元素,如果找到,则将该元素从子列表删除; 3. 将处理后的子列表添加到新的列表; 4. 返回处理后的新列表。 下面是一个示例代码,它删除了二维列表的所有元素为`3`的元素: ```python lst = [[1, 2, 3], [4, 3, 6], [7, 8, 9, 3]] result = [[item for item in inner_lst if item != 3] for inner_lst in lst] print(result) ``` 输出结果为: ``` [[1, 2], [4, 6], [7, 8, 9]] ``` 在上面的代码,我们使用了嵌套的列表推导式,先遍历了每一个子列表,再遍历子列表的每一个元素。如果元素的值不是`3`,则将其添加到新的子列表。最后返回处理后的新列表。 ### 回答2: 要删除二维列表的指定元素,可以使用嵌套循环遍历整个列表,并通过判断去除需要删除的元素。 首先,我们定义一个二维列表,例如[[1, 2, 3], [4, 5, 6], [1, 2, 3]]。假设要删除的元素是2。 接下来,我们使用两个嵌套的for循环遍历二维列表的每个元素,并判断是否为需要删除的元素: ``` python matrix = [[1, 2, 3], [4, 5, 6], [1, 2, 3]] target = 2 for inner_list in matrix: for element in inner_list: if element == target: inner_list.remove(element) ``` 在代码,我们使用了两个for循环,外层循环迭代二维列表的每个子列表,内层循环迭代每个子列表的元素。如果某个元素等于目标元素,就使用`remove()`函数将其从子列表删除。 运行上述代码后,我们可以得到结果[[1, 3], [4, 5, 6], [1, 3]]。可见,列表的2已经被成功删除。 需要注意的是,在循环直接对列表进行修改时,可能会导致遍历出错。因此,在删除元素后,我们需要使用`break`语句终止内层循环,以避免出现潜在的问题。 以上就是删除二维列表指定元素的方法。 ### 回答3: 要删除二维列表指定元素,可以使用嵌套循环遍历二维列表,逐个检查每个元素是否为指定元素,如果找到了就删除。 首先,我们可以使用两个循环,外部循环用于遍历每个子列表,内部循环用于遍历当前子列表的每个元素。然后,我们可以使用条件语句来判断当前元素是否为指定元素,如果是,则使用列表的remove方法删除该元素。 以下是一个示例代码实现: ```python def remove_element(matrix, target): for sub_list in matrix: for element in sub_list: if element == target: sub_list.remove(element) return matrix ``` 在这个示例代码,我们定义了一个名为`remove_element`的函数,该函数接受两个参数:`matrix`代表二维列表,`target`代表要删除的元素。函数首先遍历每个子列表`sub_list`,然后遍历当前子列表的每个元素`element`,如果`element`等于`target`,则使用`sub_list.remove(element)`删除该元素。 最后,函数返回删除指定元素后的二维列表。 注意:由于在循环修改了列表的结构,可能会导致索引的偏移,因此该方法需要谨慎使用。另外,这种方法只能删除找到的第一个指定元素,如果要删除所有的指定元素,可以考虑使用索引方式删除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值