PHP5.6使用多个字段展平多维数组

PHP5.6使用多个字段展平多维数组,php,arrays,Php,Arrays,我有一个多维数组,如下所示: array (size=2) 0 => array (size=3) 'a1' => boolean true 'b1' => string 'abc' (length=6) 'c1' => string 'def' (length=8) 1 => array (size=5) 'a2' => boolean true 'b2' => s

我有一个多维数组,如下所示:

array (size=2)
  0 => 
    array (size=3)
      'a1' => boolean true
      'b1' => string 'abc' (length=6)
      'c1' => string 'def' (length=8)
  1 => 
    array (size=5)
      'a2' => boolean true
      'b2' => string 'fgh' (length=6)
      'c2' => string 'ijk' (length=8)
      'd2' => string 'lmn' (length=4)
      'e2' => string 'opq' (length=4)
我的目标是做到这一点:

array (size=8)
  'a1' => boolean true
  'b1' => string 'abc' (length=6)
  'c1' => string 'def' (length=8)
  'a2' => boolean true
  'b2' => string 'fgh' (length=6)
  'c2' => string 'ijk' (length=8)
  'd2' => string 'lmn' (length=4)
  'e2' => string 'opq' (length=4)
我尝试过使用数组映射函数,但不知道如何获取所有字段:

$params = array_map(function($element) {
    return $element['a1'];
}, $params);
尝试使用以下方法:

function array_flatten($array) {
    if (!is_array($array)) {
        return FALSE;
    }
    $result = array();
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $result = array_merge($result, array_flatten($value));
        }
        else {
            $result[$key] = $value;
        }
    }
    return $result;
}
我用以下方法进行测试:

$array = array(
    0 => array(
        'a1' => true,
        'b1' => 'abc',
        'c1' => 'def',
    ),
    1 => array(
        'a2' => true,
        'b2' => 'fgh',
        'c2' => 'ijk',
        'd2' => 'lmn',
        'e2' => 'opq'
    )
);

$result = array_flatten($array);

var_dump($result);
输出为:

array (size=8)
    'a1' => boolean true
    'b1' => string 'abc' (length=3)
    'c1' => string 'def' (length=3)
    'a2' => boolean true
    'b2' => string 'fgh' (length=3)
    'c2' => string 'ijk' (length=3)
    'd2' => string 'lmn' (length=3)
    'e2' => string 'opq' (length=3)
但我更喜欢诚实,我想这是我从一个重复的问题中得到的一个函数,再也找不到了!但是我用它来“展平”一些数组,效果很好:)

试着用这个:

function array_flatten($array) {
    if (!is_array($array)) {
        return FALSE;
    }
    $result = array();
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $result = array_merge($result, array_flatten($value));
        }
        else {
            $result[$key] = $value;
        }
    }
    return $result;
}
我用以下方法进行测试:

$array = array(
    0 => array(
        'a1' => true,
        'b1' => 'abc',
        'c1' => 'def',
    ),
    1 => array(
        'a2' => true,
        'b2' => 'fgh',
        'c2' => 'ijk',
        'd2' => 'lmn',
        'e2' => 'opq'
    )
);

$result = array_flatten($array);

var_dump($result);
输出为:

array (size=8)
    'a1' => boolean true
    'b1' => string 'abc' (length=3)
    'c1' => string 'def' (length=3)
    'a2' => boolean true
    'b2' => string 'fgh' (length=3)
    'c2' => string 'ijk' (length=3)
    'd2' => string 'lmn' (length=3)
    'e2' => string 'opq' (length=3)

但我更喜欢诚实,我想这是我从一个重复的问题中得到的一个函数,再也找不到了!但我用它来“展平”一些数组,效果很好:)

您需要使用循环来合并数组

<?php
$arr = [
  ["a1"=>true,"b1"=>"abc"],
  ["a2"=>true,"b2"=>"fgh"]
];
$new = [];
foreach($arr as $key=>$val){
  $new = array_merge($new,$val);
}
print_r($new);
?>

您需要使用循环来合并数组

<?php
$arr = [
  ["a1"=>true,"b1"=>"abc"],
  ["a2"=>true,"b2"=>"fgh"]
];
$new = [];
foreach($arr as $key=>$val){
  $new = array_merge($new,$val);
}
print_r($new);
?>

对于示例中的数据,可以使用、传递和空数组作为初始值并添加数组:

$arrays = [
    [
        "a1" => true,
        "b1" => "abc",
        "c1" => "def"
    ],
    [
        "a2" => true,
        "b2" => "fgh",
        "c2" => "ijk",
        "d2" => "lmn",
        "e2" => "opq"
    ]
];

$result = array_reduce($arrays, function ($carry, $item) {
        $carry += $item;
        return $carry;
}, []);

var_dump($result);

这将导致:

array(8) {
  ["a1"]=>
  bool(true)
  ["b1"]=>
  string(3) "abc"
  ["c1"]=>
  string(3) "def"
  ["a2"]=>
  bool(true)
  ["b2"]=>
  string(3) "fgh"
  ["c2"]=>
  string(3) "ijk"
  ["d2"]=>
  string(3) "lmn"
  ["e2"]=>
  string(3) "opq"
}

对于示例中的数据,可以使用、传递和空数组作为初始值并添加数组:

$arrays = [
    [
        "a1" => true,
        "b1" => "abc",
        "c1" => "def"
    ],
    [
        "a2" => true,
        "b2" => "fgh",
        "c2" => "ijk",
        "d2" => "lmn",
        "e2" => "opq"
    ]
];

$result = array_reduce($arrays, function ($carry, $item) {
        $carry += $item;
        return $carry;
}, []);

var_dump($result);

这将导致:

array(8) {
  ["a1"]=>
  bool(true)
  ["b1"]=>
  string(3) "abc"
  ["c1"]=>
  string(3) "def"
  ["a2"]=>
  bool(true)
  ["b2"]=>
  string(3) "fgh"
  ["c2"]=>
  string(3) "ijk"
  ["d2"]=>
  string(3) "lmn"
  ["e2"]=>
  string(3) "opq"
}
以下是解决方案:

$d = array (
array (
'a1' => true,
'b1' => 'abc' ,
'c1' => 'def' ),
array (
'a2' => true,
'b2' => 'fgh',
'c2' => 'ijk' ,
'd2' => 'lmn' ,
'e2' => 'opq' ));

function flatten(array $array)
{
    $result = array();
    if (is_array($array)) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                $result = array_merge($result, flatten($v));
            } else {
                $result[$k] = $v;
            }
        }
    }
    return $result;
}

$dd = flatten($d);
echo "<pre>";
print_r($dd);
echo "</pre>";
$d=array(
排列(
'a1'=>正确,
“b1”=>“abc”,
“c1'=>“def”),
排列(
“a2”=>正确,
“b2”=>“fgh”,
“c2”=>“ijk”,
“d2”=>“lmn”,
‘e2’=>‘opq’);
函数展平(数组$array)
{
$result=array();
if(is_数组($array)){
foreach($k=>v的数组){
if(is_数组($v)){
$result=array_merge($result,flatten($v));
}否则{
$result[$k]=$v;
}
}
}
返回$result;
}
$dd=扁平化($d);
回声“;
印刷费($dd);
回声“;
演示:

以下是解决方案:

$d = array (
array (
'a1' => true,
'b1' => 'abc' ,
'c1' => 'def' ),
array (
'a2' => true,
'b2' => 'fgh',
'c2' => 'ijk' ,
'd2' => 'lmn' ,
'e2' => 'opq' ));

function flatten(array $array)
{
    $result = array();
    if (is_array($array)) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                $result = array_merge($result, flatten($v));
            } else {
                $result[$k] = $v;
            }
        }
    }
    return $result;
}

$dd = flatten($d);
echo "<pre>";
print_r($dd);
echo "</pre>";
$d=array(
排列(
'a1'=>正确,
“b1”=>“abc”,
“c1'=>“def”),
排列(
“a2”=>正确,
“b2”=>“fgh”,
“c2”=>“ijk”,
“d2”=>“lmn”,
‘e2’=>‘opq’);
函数展平(数组$array)
{
$result=array();
if(is_数组($array)){
foreach($k=>v的数组){
if(is_数组($v)){
$result=array_merge($result,flatten($v));
}否则{
$result[$k]=$v;
}
}
}
返回$result;
}
$dd=扁平化($d);
回声“;
印刷费($dd);
回声“;

演示:

使用
递归迭代器
。从

可以用于通过递归迭代器进行迭代

例如:

$flatArray = array(); // an empty array where we will store rest of arrays

foreach($multiArray as $item){
$flatArray = array_merge($flatArray,$item); //get arrays and merge into main array
}

使用
递归迭代器
。从

可以用于通过递归迭代器进行迭代

例如:

$flatArray = array(); // an empty array where we will store rest of arrays

foreach($multiArray as $item){
$flatArray = array_merge($flatArray,$item); //get arrays and merge into main array
}

使用
调用用户函数数组()

Array ( [a1] => 1 [b1] => abc [c1] => def [a2] => 1 [b2] => fgh [c2] => ijk 
[d2] => lmn [e2] => opq )
输出:

<?php

$data =
[
    [
        'foo' => true,
        'bar' => false
    ],
    [
        'baz' => true,
        'bat' => true
    ]
];

$out = [];
foreach($data as $item)
    foreach($item as $k => $v)
        $out[$k] = $v;

var_export($out);

阅读有关使用
调用用户函数数组()

Array ( [a1] => 1 [b1] => abc [c1] => def [a2] => 1 [b2] => fgh [c2] => ijk 
[d2] => lmn [e2] => opq )
输出:

<?php

$data =
[
    [
        'foo' => true,
        'bar' => false
    ],
    [
        'baz' => true,
        'bat' => true
    ]
];

$out = [];
foreach($data as $item)
    foreach($item as $k => $v)
        $out[$k] = $v;

var_export($out);
阅读有关foreach的内容:

array (
'foo' => true,
'bar' => false,
'baz' => true,
'bat' => true,
)
到达foreach:

array (
'foo' => true,
'bar' => false,
'baz' => true,
'bat' => true,
)


我真的不知道为什么人们总是坚持通过寻找复杂的数组函数来失败这样的东西——寻找可以使用简单循环完成的基本东西……我真的不知道为什么人们总是坚持通过寻找复杂的数组函数来失败这样的东西——寻找可以使用简单循环完成的基本东西……我明白了我的IDE中出现以下错误
未定义函数展平()
您添加了函数吗?我想他正在使用类,所以请尝试
$this->flatte()
我的IDE中出现以下错误
未定义函数展平()
您添加了函数吗?我想他正在使用类,所以请尝试
$this->flatte())
我在我的IDE
未定义的函数array\u flatte()
中遇到了这个错误。我的函数名为
array\u flatte()
:),您需要在执行它之前添加它!哦,好的,我看到你使用了相同的函数,我想它可能是PHP@MikloV:如果您使用的是类use
$this->array\u flatte()
我在我的IDE
未定义函数array\u flatte()
中遇到此错误,那么我的函数名为
array\u flatte()
:),您需要在执行它之前添加它!哦,好的,我看到你使用了相同的函数,我想它可能是PHP@MikloV:如果您使用的是类use
$this->array\u flant()
array\u merge(…$array)将在此处执行。
array\u merge(…$array)将在此处执行。此代码有语法错误。即使纠正了
$flatary
也将为空。更正并运行代码,然后检查生成的数组。此代码有语法错误。即使纠正了
$flatary
也将为空。更正并运行代码,然后检查生成的数组。