首页 > 解决方案 > 如何根据原始数组中的值将 PHP 多维数组转换为另一个数组?

问题描述

我已经为此花了一周的时间,我试图想出一种方法来访问多维数组中的数据并将其输出到另一个数组,根据数组中的值进行不同的重组。我没有发布一排排损坏的代码,而是简化了我的示例:

这是原始数组:

array(2) {
    [0] => array(2) {
        ["aaa"] => array(2) {
            ["a19a3234b881ce"] => array(2) {
                ["pid"] => int(29301)
                ["vid"] => int(29334)
                ["idx"] => int(88888)
            }
            ["a7aa94c38aa49caa"] => array(2) {
                ["pid"] => int(20568)
                ["vid"] => int(26547)
                ["idx"] => int(88888)
            }
        }
        ["bbb"] => array(2) {
            ["bsfn"] => string(4) "Apple"
            ["bsln"] => string(8) "AppleApple"
        }
    }
    [1] => array(2) {
        ["aaa"] => array(3) {
            ["abd296a10"] => array(2) {
                ["pid"] => int(56734)
                ["vid"] => int(98612)
                ["idx"] => int(99999)
            }
            ["a31e920fde8"] => array(2) {
                ["pid"] => int(09800)
                ["vid"] => int(34521)
                ["idx"] => int(99999)
            }
            ["a7aa94c38aa49caa"] => array(2) {
                ["pid"] => int(20568)
                ["vid"] => int(26547)
                ["idx"] => int(99999)
            }
        }
        ["bbb"] => array(2) {
            ["bsfn"] => string(4) "Ball"
            ["bsln"] => string(8) "BallBall"
        }
    }
}

这是我要输出的内容:

array(2) {
    ["88888"] => array(3) {
        ["a19a3234b881ce"] => array(4) {
            ["pid"] => int(29301)
            ["vid"] => int(29334)
            ["idx"] => int(88888)
            ["arr"] => string(14) "a19a3234b881ce"
        }
        ["a7aa94c38aa49caa"] => array(4) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(88888)
            ["arr"] => string(16) "a7aa94c38aa49caa"
        }
        ["bbb"] => array(2) {
            ["bsfn"] => string(4) "Apple"
            ["bsln"] => string(8) "AppleApple"
        }
    }
    ["99999"] => array(4) {
        ["abd296a10"] => array(4) {
            ["pid"] => int(29301)
            ["vid"] => int(29334)
            ["idx"] => int(99999)
            ["arr"] => string(9) "abd296a10"
        }
        ["a31e920fde8"] => array(4) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(99999)
            ["arr"] => string(11) "a31e920fde8"
        }
        ["a7aa94c38aa49caa"] => array(4) {
            ["pid"] => int(20568)
            ["vid"] => int(26547)
            ["idx"] => int(99999)
            ["arr"] => string(16) "a7aa94c38aa49caa"
        }
        ["bbb"] => array(2) {
            ["bsfn"] => string(4) "Ball"
            ["bsln"] => string(8) "BallBall"
        }
    }
}

标签: phparraysobjectmultidimensional-arrayoutput

解决方案


试试这个例子:

$result = [];
foreach($data as $item) {
    if (!empty($item['aaa']) && is_array($item['aaa'])) {
        $key = array_values($item['aaa'])[0]['idx'] ?? null;
        if ($key) {
            $result[$key] = array_merge($item['aaa'], ['bbb' => $item['bbb'] ?? []]);
        }
    }
}

// Test result:
print_r($result);

推荐阅读