【问题标题】:Create smart recursive function for multidimensional array which returns all arrays inside in one array为多维数组创建智能递归函数,该函数在一个数组中返回所有数组
【发布时间】:2021-04-21 13:30:53
【问题描述】:

主要是多维数组可以是随机的,我不知道里面到底有多少个数组。这就是为什么函数应该包含递归并检查它内部是否有更多数组,下面的示例在没有预先配置的情况下无法做到。感谢任何帮助

$arrays = array(
    array(
        'House' => 'Baratheon',
        'Sigil' => 'A crowned stag',
        'Motto' => 'Ours is the Fury',
        ),
    array(
        'Leader' => 'Eddard Stark',
        'House' => 'Stark',
        'Motto' => 'Winter is Coming',
        'Sigil' => 'A grey direwolf'
        ),
    array(
        array('SomeArray' => 'You are cool'),
        'House' => 'Lannister',
        'Leader' => 'Tywin Lannister',
        'Sigil' => 'A golden lion'
        ),
    array(
          'Q' => 'Z'
    )
);
function next_element($array) {
    foreach ($array as $some_type) {
        if (is_array($some_type)) {
            return true;
        } else {
            return false;
               }
    }
}


function check_in($inputs) {
    foreach ($inputs as $position => $input) {
    
        if (is_array($input) && next_element($input)) { // case with multidimentional array
            
            check_in($input);
            $check_in_result[] = "There are should be recursion!!!!!";

        } else { // case with one simple array
            $check_in_result[] = $input;
               }
    }
    return $check_in_result;
}

已尝试使用 array_walk_recursive(),但该函数正在处理所有元素并返回一个包含所有键和值的数组。在这种情况下,它应该是 array(array1, array2, array3, array4) 用于下一个阶段,即 foreach 循环。

结果应该是这样的:

Array
(
    [0] => Array
        (
            [House] => Baratheon
            [Sigil] => A crowned stag
            [Motto] => Ours is the Fury
        )

    [1] => Array
        (
            [Leader] => Eddard Stark
            [House] => Stark
            [Motto] => Winter is Coming
            [Sigil] => A grey direwolf
        )

    [2] => Array
        (
            [SomeArray] => You are cool
        )

    [3] => Array
        (
            [House] => Lannister
            [Leader] => Tywin Lannister
            [Sigil] => A golden lion
        )

    [4] => Array
        (
            [Q] => Z
        )

)

【问题讨论】:

  • 你能指定你想要的结果是什么吗?从问题上看不清楚。
  • 是的,Array ([0] => Array ([House] => Baratheon) [1] => Array ([Leader] => Eddard Stark) [2] => Array ([SomeArray ] => 你很酷)[3] => 数组([House] => 兰尼斯特)[4] => 数组([Q] => Z))
  • 我删除了数组的一部分,它太大了,它应该是一个数组,其中包含一层中的其他数组
  • 通过编辑您的问题添加新信息(Edit 链接可以在您的帖子底部找到)。评论不适用于大量信息(如您所见)。您应该可以在那里添加整个输出。
  • 你确定不能edit

标签: php arrays


【解决方案1】:

尝试使用这样的递归函数:

function parseMyArray($array) {
    $result = [];
    $row = [];
    foreach($array as $key => $item) {
        if (is_array($item)) {
            $result = array_merge($result, parseMyArray($item));
        } else {
            $row[$key] = $item;
        }
    }
    return !empty($row) ? array_merge($result, [$row]) : $result;
}

$result = parseMyArray($arrays);

print_r($result);

在函数调用的每一级,所有标量值及其键都作为$row 收集到一个数组中,并与嵌套函数调用的$result 合并。

fiddle

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 2013-08-07
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2022-01-26
    • 2012-06-12
    相关资源
    最近更新 更多