PHP二维数组(或任意维数组)转换成一维数组的方法汇总

目录

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

$user = array(
    ‘0‘ => array(‘id‘ => 100, ‘username‘ => ‘a1‘),
    ‘1‘ => array(‘id‘ => 101, ‘username‘ => ‘a2‘),
    ‘2‘ => array(‘id‘ => 102, ‘username‘ => ‘a3‘),
    ‘3‘ => array(‘id‘ => 103, ‘username‘ => ‘a4‘),
    ‘4‘ => array(‘id‘ => 104, ‘username‘ => ‘a5‘),
);

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

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

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

$result = array(100, ‘a1‘, 101, ‘a2‘, 102, ‘a3‘, 103, ‘a4‘, 104, ‘a5‘);

主要有下面几个方法。

1 array_reduce函数法

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

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

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

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

$user = array(
    ‘a‘ => array(100, ‘a1‘),
    ‘b‘ => array(101, ‘a2‘),
    ‘c‘ => array(102, ‘a3‘),
    ‘d‘ => array(103, ‘a4‘),
    ‘e‘ => array(104, ‘a5‘),
);

那么直接这样就可以了:

$result = array_reduce($user, ‘array_merge‘, array())

2 array_walk_recursive函数法

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

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

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

$user4 = array(
    ‘a‘ => array(100, ‘a1‘),
    ‘b‘ => array(101, ‘a2‘),
    ‘c‘ => array(
        ‘d‘ => array(102, ‘a3‘),
        ‘e‘ => array(103, ‘a4‘),
    ),
);

用这个方法后就变成:

$result = array(100, ‘a1‘, 101, ‘a2‘, 102, ‘a3‘, 103, ‘a4‘);

3 array_map函数法

array_maparray_reduce函数的方法类似,如下:

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

只是需要多声明一个空的$result数组。

另外,也可以用array_walk的方法,和foreach循环的方法,原理和上面一样。

时间: 2024-10-27 18:08:45

PHP二维数组(或任意维数组)转换成一维数组的方法汇总的相关文章

PHP二维数组转换成一维数组,一个变量多个二维数组转换成一维数组,PHP二维数组(或任意维数组)转换成一维数组的方法汇总,array_reduce(); array_walk_recursive(); array_map();

方法汇总: 1. array_reduce函数法 //用array_reduce()函数是较为快捷的方法: $result = array_reduce($user, function ($result, $value) { return array_merge($result, array_values($value)); }, array()) 2. array_walk_recursive函数法 //用array_walk_recursive()函数就非常灵活,可以把任意维度的数组转换成一

php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

版权声明:本文为博主原创文章,未经博主允许不得转载. 最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二维数组的第一维的键是特定字段的值,二维的键可以是随机索引,也可以是其中的另一个字段的值.其实这个需求经常会在工作中碰到,只是碰到的时候一个有重复的就直接用之前的覆盖后面的或者用之后的覆盖之前的,这样很容易就可以处理了.很少碰到这种有一维数组又有二维数组的情况,先上代码: $a = array( 0

将二维数组转换成一维数组(基于reduce)

reduce:不改变原数组,返回一个新的数组.就是遍历数组元素,从头开始,依次往下,第一个参数是上一次的返回值,第二个参数是下一个数组元素,首次的时候第一个和第二个参数分别是 array[0],  array[1] : let flat=[[1,2,3],[4,5,6],[6,7,8]].reduce(function(prev,next){ return prev.concat(next);//循环将数组进行拼接 }); console.log(flat); 原文地址:https://www.

C++入门经典-例6.10-将多维数组转换成一维数组

1:代码如下: // 6.10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; void main() { int array1[3][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; int array2[12]={0}; int row,col,i; cout << "array old"

RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)

Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶.智能助手.图像识别等许多层面.苹果业已开始全面拥抱机器学习,新产品进军家庭智能音箱并打造工作站级别Mac.另外,腾讯的深度学习平台Mariana已支持了微信语音识别的语音输入法.语音开放平台.长按语音消息转文本等产品,在微信图像识别中开始应用.全球前十大科技公司全部发力人工智能理论研究和应用的实现

将一个一维数组的元素赋值给另外一个一维数组中

//数组拷贝 int a[5] = {37,25,18,-2,78}; int b[5] = {0}; for (int i = 0; i < 5; i++) { b[i] = a[i]; printf("%d ",b[i]); } 将一个一维数组的元素赋值给另外一个一维数组中

JavaSE8基础 String getBytes 将不含中文的字符串转换成字节数组

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t01; import java.nio.charset.Charset; public class Demo01 { public static void main(String[] args) { String str = "[email protected]#$&qu

数组冒泡排序,文件读取,数据库读取,string类型的int数组转换成int数组

排序方式(枚举) 1 public enum SortBy 2 { 3 Asc, 4 Desc 5 } 数组冒泡排序方法 1 public class SortEntity 2 { 3 public static int[] SortArray(int[] array,SortBy sortby) 4 { 5 int flag; 6 switch (sortby) 7 { 8 case SortBy.Asc: 9 for (int i = 0; i < array.Length - 1; i++

Map 转换成byte[] 数组

把Map转换成byte数组,使用 ByteArrayOutputStream和ObjectOutputStream Map<String,String> map = new HashMap<String,String>(); map.put("name","aaa"); map.put("age","11"); try { byte[] bt = null; ByteArrayOutputStream