PHP 将原数组中出现的每个值作为新数组的键,对应的原数组的下标作为新数组的值

19 篇文章 0 订阅
13 篇文章 2 订阅

PHP 将原数组中出现的每个值作为新数组的键,对应的原数组的下标作为新数组的值

需 求

[
  15 => [
    0 => 6
    1 => 56
    2 => 57
    3 => 61
  ]
  16 => [
    0 => 6
    1 => 92
    2 => 93
    3 => 99
    4 => 106
  ]
  17 => [
    0 => 6
    1 => 92
    2 => 93
    3 => 99
  ]
  18 => [
    0 => 6
    1 => 57
    2 => 71
    3 => 100
    4 => 107
  ]
  19 => [
    0 => 6
    1 => 66
    2 => 115
  ]
  20 => [
    0 => 6
    1 => 66
    2 => 100
  ]
  21 => [
    0 => 6
    1 => 57
    8 => 138
  ]
  22 => [
    0 => 6
    1 => 57
    2 => 118
    3 => 126
    4 => 138
  ]
  23 => [
    0 => 6
    1 => 66
    22 => 166
  ]
  24 => [
    0 => 6
    1 => 57
    2 => 118
    3 => 126
    4 => 138
  ]
  25 => [
    0 => 6
    1 => 66
  ]
]




改为
[
    6=>[
        0=>15,
        1=>16,
        2=>17,
        3=>18,
        4=>19,
        5=>20,
        6=>21,
        7=>22,
        8=>23,
        9=>24,
        10=>25,
    ],
    56=>[
        0=>15
    ],
    57=>[
        0=>15,
        1=>21,
        2=>22,
        3=>24,
        4=>18,
    ],
    ........
]
$arr = [
    15 => [0 => 6, 1 => 56, 2 => 57, 3 => 61],
    16 => [0 => 6, 1 => 92, 2 => 93, 3 => 99, 4 => 106],
    17 => [0 => 6, 1 => 92, 2 => 93, 3 => 99],
    18 => [0 => 6, 1 => 57, 2 => 71, 3 => 100, 4 => 107],
    19 => [0 => 6, 1 => 66, 2 => 115],
    20 => [0 => 6, 1 => 66, 2 => 100],
    21 => [0 => 6, 1 => 57, 8 => 138],
    22 => [0 => 6, 1 => 57, 2 => 118, 3 => 126, 4 => 138],
    23 => [0 => 6, 1 => 66, 22 => 166],
    24 => [0 => 6, 1 => 57, 2 => 118, 3 => 126, 4 => 138],
    25 => [0 => 6, 1 => 66],
];


$newArr = [];
foreach ($arr as $key => $value) {
    foreach ($value as $v) {
        if (!array_key_exists($v, $newArr)) {
            $newArr[$v] = [$key];
        } else {
            $newArr[$v][] = $key;
        }
    }
}


print_r($newArr);

得到结果

[
    6=>[
        0=>15,
        1=>16,
        2=>17,
        3=>18,
        4=>19,
        5=>20,
        6=>21,
        7=>22,
        8=>23,
        9=>24,
        10=>25,
    ],
    56=>[
        0=>15
    ],
    57=>[
        0=>15,
        1=>21,
        2=>22,
        3=>24,
        4=>18,
    ],
    ........
]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upcto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值