如何基于某些相似的值组合数组元素?

时间:2015-03-09 21:38:50

标签: php

我有一个包含数千个元素的数组。我需要合并具有相同特定部分值的元素。

$A = array('a|b|c','d|e|f','h|i|c','k|l|m');

我想将$ A [0]与$ A [2]结合起来,因为它们都包含" c"。所以新的数组变成了:

$A = array('a|b|c|h|i','d|e|f','k|l|m');

这可能吗?

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案:

$A = array('a|b|c','d|e|f','h|i|c','k|l|m');

$B = array();
foreach($A as $v) {
    $B[] = explode("|", $v);
}

$i = 0;
$count = count($B);
while($i < $count-1) {
    for ($j = ($i+1); $j < $count; $j++) {
        if (!isset($B[$j])) {
            continue;
        }
        foreach ($B[$j] as $v) {
            if (in_array($v, $B[$i])) {
                $B[$i] = array_unique(array_merge($B[$i], $B[$j]));
                unset($B[$j]);
                break 2;
            }
        }
    }
    $i++;
}

$C = array();
foreach ($B as $v) {
    sort($v);
    $C[] = implode("|", $v);
}

print_r($C);

给你

Array ( [0] => a|b|c|h|i [1] => d|e|f [2] => k|l|m )

首先我们将原来的$ A数组拆分成一个数组数组(所以我们稍后可以使用in_array),然后循环遍历我们新的数组$ B,循环遍历所有内部元素,如果匹配并且匹配删除后面的元素。因为PHP中的数组是关联的,所以一旦我们删除B [2],它就会按原样保留B [3],所以我们必须检查以确保$ B [$ j]实际上仍然是我们的一部分数组,否则我们会遇到错误。