将任意的二维数组转化为一维数组

目录

  • 1 array_reduce函数法
  • 2 array_walk_recursive函数法
  • 3 array_map函数法

  假设有下面一个二维数组 :

$rows = array(
    '0' => array('id' => 1, 'username' => 'unike1'),
    '1' => array('id' => 2, 'username' => 'unike2'),
    '2' => array('id' => 3, 'username' => 'unike3'),
    '3' => array('id' => 4, 'username' => 'unike4'),
    '4' => array('id' => 5, 'username' => 'unike5'),
);

  现在要转换成一维数组,有两种情况:

一种是将指定列转换成一维数组,这在另一篇文章有总结:PHP提取多维数组指定一列的方法大全

现在我们重点讲第二种情况,就是把所有的值都转换成一维数组,而且键值相同不会被覆盖,转换后的一维数组是这样的:

$result = array(1, 'unike1', 2, 'unike2', 3, 'unike3', 4, 'unike4', 5, 'unike5');

主要有下面几个方法

1 . array_reduce函数法

array_reduce()函数是较为快捷的方法:

$result = array_reduce($rows, function ($result, $value) {
    return array_merge($result, array_values($value));
}, array())

因为array_merge()函数会把相同字符串键名的数组覆盖合并,所以必须先用array_value()取出值后再合并。

如果第二维是数字键名,如:

$rows = array(
    'a' => array(1, 'unike1'),
    'b' => array(2, 'unike2'),
    'c' => array(3, 'unike3'),
    'd' => array(4, 'unike4'),
    'e' => array(5, 'unike5'),
);

那么直接这样就可以了:

$result = array_reduce($rows, 'array_merge', array())

 

2 . array_walk_recursive函数法

array_walk_recursive()函数就非常灵活,可以把任意维度的数组转换成一维数组。

$result = [];
array_walk_recursive($rows, function($value) use (&$result) {
    array_push($result, $value);
});

例如,下面这个多维数组:

$rows = array(
    'a' => array(1, 'unike1'),
    'b' => array(2, 'unike2'),
    'c' => array(
        'd' => array(3, 'unike3'),
        'e' => array(4, 'unike4'),
    ),
);

用这个方法后就变成:

$result = array(1, 'unike1', 2, 'unike2', 3, 'unike3', 4, 'unike4');

 

3 . array_map函数法

array_map()array_reduce()函数的方法类似,如下:

$result = [];
array_map(function ($value) use (&$result) {
    $result = array_merge($result, array_values($value));
}, $rows);

只是需要多声明一个空的$result数组。另外,也可以用array_walk的方法,和foreach循环的方法,原理和上面一样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
普通二维数组和map的区别在于它们的数据结构和使用方式不同。 普通二维数组是由多个数组组成的数组,每个子数组代表一行或一列的数据。它的访问方式是通过索引来获取特定位置的元素。可以使用嵌套的循环来遍历和操作二维数组的元素。 而map是一种数据结构,它由键-值对组成,每个键对应一个值。在JavaScript中,map通常是由对象表示的,其中键是字符串或其他类型的值,而值可以是任意类型。与二维数组不同,map可以使用键来访问和操作特定的值,而不需要通过索引。 另外,map还提供了一些方便的方法,如set、get、delete和has,可以用来添加、获取、删除和检查map中的键值对。这使得map更适合处理键值对数据,而不仅仅是多维数组的索引访问。 总而言之,普通二维数组适用于简单的表格数据和矩阵运算,而map适用于需要键-值对表示的数据结构,以及需要更灵活的数据操作和查询的情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [二维数组转化为普通数组](https://blog.csdn.net/lzfengquan/article/details/127731577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值