首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从php中的现有数组中生成一个新数组?

如何从php中的现有数组中生成一个新数组?
EN

Stack Overflow用户
提问于 2020-02-15 10:07:47
回答 2查看 48关注 0票数 2

假设下面有这样的数组。

代码语言:javascript
复制
$i = array(
    'arr1'  => array(
        'a11'   => 'ar11',
        'a12'   => 'ar12',
    ),
    'arr2'  => array(
        'a21'   => 'ar21',
        'a22'   => 'ar22',
        'a23'   => 'ar23',
    ),
    'arr3'  => 'arrr3',
    'arr4'  => 'arrr4'
);

我想要一个新的数组,像下面提到的,

代码语言:javascript
复制
$j = array(
    'a11'   => 'ar11',
    'a12'   => 'ar12',
    'a21'   => 'ar21',
    'a22'   => 'ar22',
    'a23'   => 'ar23',
    'arr3'  => 'arrr3',
    'arr4'  => 'arrr4'
);

我试着提取最后两个元素,它们不是数组,我提到了下面的代码

代码语言:javascript
复制
$ii = $i;
foreach($ii as $k => $v):
    if(is_array($v)):
        unset($ii[$k]);
    endif;
endforeach;

这将返回最后两个元素。但是,我试图提取其他元素的方式看起来是有线的,如下所示。

代码语言:javascript
复制
$i1 = $i['arr1'];
$i2 = $i['arr2'];
$i3 = array_merge($i1, $i2);
$final = array_merge($i3, $j);

这看起来很简单,因为它有少量的元素,但是我的项目中有大量的元素,还有其他方法来获得这个输出吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-15 10:17:12

你能试试这个吗?

代码语言:javascript
复制
$final = [];

foreach($i as $key => $value){
    if(is_array($value){
        $final = array_merge($final, $value);

    }   else{
        $final[$key] = $value;
    }
}

Upd.

@坚持要解释循环内部发生了什么。首先,我们检查值是否是数组。如果值是一个数组,我们将嵌套数组与(新的,在循环开始前创建)数组合并,在其中放置元素。如果值不是数组,我们只需获取该值并将其添加到最后的数组中。这里没有魔法。但是下面使用array_walk_recursive()的答案要优雅得多,但里面有“魔力”。

票数 1
EN

Stack Overflow用户

发布于 2020-02-15 10:22:18

递归()是您所需要的:

代码语言:javascript
复制
$a = array(
    'arr1'=> array(
        'a11' => 'ar11',
        'a12' => 'ar12',
    ),
    'arr2'=> array(
        'a21' => 'ar21',
        'a22' => 'ar22',
        'a23' => 'ar23',
    ),
    'arr3' => 'arrr3',
    'arr4' => 'arrr4'
);

$b = array();
array_walk_recursive($a, function($val, $key) use(&$b)
{
    $b[$key] = $val;
});

您可以测试它的这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60237738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档