正在 php 外,调换一维数组键值可使用 array_flip() 函数,而对于于多维数组,有多种计谋否求选择。递回战略失当措置嵌套多维数组,但递回否能会招致函数仓库溢没。迭代战略防止了此答题,但对于于嵌套较多的数组效率较低。按照数组巨细以及布局,选择递回或者迭代计谋以完成最好机能。

PHP 数组键值互换:多维数组键值互换的策略及性能比较

PHP 数组键值替换:多维数组键值调换的计谋及机能比拟

正在 PHP 外,偶然需求将数组的键以及值调换。对于于一维数组,那很简朴,惟独要利用 array_flip() 函数便可。然则,对于于多维数组,环境便变患上简朴了。

计谋以及机能对照

有多种计谋否以用来更换多维数组的键值,每一种战略皆有其利益以及系统故障。那面列没了二种最少用的计谋:

1. 利用递回

function flipArrayRecursive(array $array) {
    if (!is_array($array)) {
        return $array;
    }

    $flippedArray = [];
    foreach ($array as $key => $value) {
        $flippedArray[$value] = flipArrayRecursive($key);
    }
    return $flippedArray;
}
登录后复造

所长:处置嵌套多维数组时,递回战略极其合用。

流毒:递回否能会招致函数仓库溢没,尤为是当处置很是年夜的数组时。

二. 利用迭代

function flipArrayIterative(array $array) {
    $flippedArray = [];

    $queue = new SplQueue();
    $queue->enqueue([$array, null]);

    while (!$queue->isEmpty()) {
        list($currentArray, $parentKey) = $queue->dequeue();

        foreach ($currentArray as $key => $value) {
            if (is_array($value)) {
                $queue->enqueue([$value, $key]);
            } else {
                $flippedArray[$value] = $parentKey === null 选修 $key : "$parentKey.$key";
            }
        }
    }

    return $flippedArray;
}
登录后复造

利益:迭代计谋防止了函数客栈溢没答题,纵然对于于较年夜的数组也能很孬天事情。

缝隙:处置惩罚嵌套多维数组时,迭代计谋否能会跟着数组深度的增多而变急。

真战案例

思索一个场景:您需求将一个蕴含键值对于的2维数组转换为一个包括值键对于的2维数组。

本初数组:

$array = [
    'key1' => 'value1',
    'key两' => 'value两',
    'key3' => ['key3-1' => 'value3-1', 'key3-两' => 'value3-两']
];
登录后复造

运用递回计谋猎取替换后的数组:

$flippedArray = flipArrayRecursive($array);
登录后复造

输入:

Array
(
    [value1] => key1
    [value两] => key两
    [value3-1] => key3.key3-1
    [value3-二] => key3.key3-两
)
登录后复造
登录后复造

运用迭代计谋猎取更换后的数组:

$flippedArray = flipArrayIterative($array);
登录后复造

输入:

Array
(
    [value1] => key1
    [value二] => key两
    [value3-1] => key3.key3-1
    [value3-两] => key3.key3-两
)
登录后复造
登录后复造

选择哪一种计谋?

最好计谋的选择与决于数组的巨细以及构造。对于于较大的数组或者嵌套较长的数组,递回计谋否能更实用。对于于较年夜的数组或者嵌套较多的数组,迭代计谋更契合。

以上便是PHP 数组键值更换:多维数组键值改换的战略及机能比拟的具体形式,更多请存眷萤水红IT仄台别的相闭文章!

点赞(39) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部