我有一个包含数千个元素的数组。我需要合并具有相同特定部分值的元素。
$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');
这可能吗?
答案 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]实际上仍然是我们的一部分数组,否则我们会遇到错误。