问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php 怎样把二维数组转为一维数组

发布网友 发布时间:2022-04-07 10:36

我来回答

4个回答

懂视网 时间:2022-04-07 14:57


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

$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_map和array_reduce函数的方法类似,如下:

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

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

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

更多PHP相关知识,请访问PHP中文网!

热心网友 时间:2022-04-07 12:05

array_column这个函数应该能满足你的需求

$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);
$first_names = array_column($records, 'first_name');
var_mp($first_names);
会输出
Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

热心网友 时间:2022-04-07 13:23

$arr=array(
'0'=>array(
'a'=>2,
'b'=>'fd',
'c'=>'fgd',
'd'=>'hg',
),
'1'=>array(
'e'=>2,
'b'=>'fd',
'f'=>'fgd',
),
'2'=>array(
'a'=>2,
'c'=>'fd',
'e'=>'fgd',
'b'=>'hg',
),
'3'=>array(
'c'=>2,
'd'=>'fd',
'e'=>'fgd',
'f'=>'hg',
),
);
foreach($arr as $k=>$v){
foreach($v as $key=>$val){
$arr2[$key]=$val;
}
}

热心网友 时间:2022-04-07 14:58

<?php
$arr = array(
    0 => array(
        0 => array(
            'id' => 5,
            'name' => 'aaa',
            'times' => 5
            ),
        1 => array(
            'id' => 5,
            'name' => 'aaa',
            'times' => 5
            ),
        ),
    1 => array(
        0 => array(
            'id' => 5,
            'name' => 'aaa',
            'times' => 5
            ),
        1 => array(
            'id' => 5,
            'name' => 'aaa',
            'times' => 5
            ),
        ),
    );
$arr2 = array();
foreach ($arr as $k => $v) {
    foreach ($v as $m => $n) {
        $arr2[0][] = $n;
    }
}
 
echo "<pre>";
print_r($arr2);
?>

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我女朋友我在同事面前说她是我媳妇她默认,在她组长面前就不承认了什么... 跨省迁户口需要的手续 户口跨省迁移需要哪些手续? cf空白名字怎么打(cf空白名字怎么打2021) 关于旅行的电影 就是一个人旅行放松心灵那种 不要纪录片 模拟人生2高斯的遗产给儿子还是女儿 模拟人生2如何跟高斯结婚啊? 模拟人生2高斯怎么找到贝拉,找到后能怎么办? 我的米2插上充电器后屏幕一直闪,快速的一下显示充电一下没在充电。请 ... ...屏幕乱闪 充不进去电 用手机连接电脑也是一样 这种桔子怎么不能剥皮?应该怎么吃? 女生说 “想吃个橘子,不想剥皮”是什么意思? 你好,我的oppo手机炸炸账号已被锁死,怎么办? 我的OPPO a 83t 手机QQ 号被暂时冻结了,现在急需登录QQ号上课,怎么做才能解冻? 吃橘子又不想剥皮那怎么吃呢? 我的OPPO账号被盗了 怎么办 申诉也没有办法? 吃橘子时需不需要吐皮?橘子皮对人体有什么好处及坏处? 捡到的手机被oppo账号锁了怎么办 为什么吃橘子一定要剥皮呢? oppo手机冻结软件后怎么解冻? 吃橘子要不要剥皮? 吃橘子是不是要先剥皮 oppo手机换到苹果手机微信怎么解冻账号 我打别人电话响铃待按中出现动画图怎样消除? 为什么我手机银行中国银行借记卡转账限额比较高,但是绑定支付宝提示我每日只能一万 中行信用卡可以转入1万以上吗 为什么中国银行卡在网上一天只能转账一万元 php二维数组变成一维数组 请问有什么软件可以将文字转换音频文件? 父女同一天生日,女儿取什么名字好? 日立全自动洗衣机脱水响声大,什么问题? 日立洗衣机老是吧啦吧啦响 日立洗衣机脱水时咕噜咕噜响然后就停止工作了? 日立波轮洗衣机好用吗 日立洗衣机脱水时摇摆剧烈为何 日立全自动洗衣机脱水筒晃动厉害。怎么修? 滚筒日立洗衣机进水和洗时发出噪音是什么原因? 日立全自动洗衣机洗衣服时发出吱吱的声响 日立洗衣机波轮转的快异响,日立全自动洗衣机开始洗衣时,波轮转的很快... 我的日立全自动洗衣机,洗衣正常,就是洗衣脱水或者单独脱水的时候,只... 日立的洗衣机怎么样 日立洗衣机脱水甩不干 日立全自动洗衣机怎么样? 我家的日立洗衣机功能调好了要洗衣服的时候嘀嘀的不停地叫,有时拔了电一会就好了有时不好什么问题啊? 日立洗衣机按脱水时脱水灯与程序灯亮并报警是什么问题? 怎么能快速把贴在墙上的壁纸撕掉 苹果手机越狱后怎么上传长视频到快手 已越狱iphone的gif快手怎么上传长视频?求教程!因为我看到有些人可以上传很长时间的视频,我的 怎么发3m长视频朋友圈,, 360行车助手怎么发长视频