如何从多维数组中找出重复值并生成对应索引映射数组
搞定多维数组重复值的索引映射需求
嘿,我来帮你解决这个问题!假设你手里有这么个多维数组:
Array ( [0] => Array ( [0] => 71 [1] => 33 [2] => 46 ) [1] => Array ( [0] => 71 ) [4] => Array ( [0] => 71 [1] => 33 ) )
里面的71和33重复出现,现在要把每个重复值对应的原数组索引整理成映射数组,最终要得到这样的结果:
Array ( [71] => Array ( [0] => 0 [1] => 1 [2] => 4 ) [33] => Array ( [0] => 0 [1] => 4 ) )
实现思路&代码(以PHP为例)
思路其实很简单,就是两层遍历:先扫原数组的每个元素,记录它的索引;再扫每个子数组里的数值,把数值当键,原数组索引塞进对应的数组里就行。直接上代码:
<?php // 你的原多维数组 $originalArray = [ 0 => [71, 33, 46], 1 => [71], 4 => [71, 33] ]; // 初始化结果数组 $indexMap = []; // 第一层遍历:拿到原数组的索引和对应的子数组 foreach ($originalArray as $parentKey => $subArray) { // 第二层遍历:遍历子数组里的每个数值 foreach ($subArray as $num) { // 如果结果里还没这个数值的键,先初始化空数组 if (!isset($indexMap[$num])) { $indexMap[$num] = []; } // 把当前原数组索引加进去 $indexMap[$num][] = $parentKey; } } // 打印看看结果 print_r($indexMap); ?>
运行这段代码,就能得到你想要的映射数组啦!如果还想过滤掉只出现一次的数值(比如例子里的46),再加个小过滤就行:
// 只保留出现多次的数值的索引数组 $indexMap = array_filter($indexMap, function($indices) { return count($indices) > 1; });
内容的提问来源于stack exchange,提问作者Niranj Patel
相关产品推荐
相关产品推荐

