我想在多维数组中删除重复项。我的阵列是这样的:
a => array (a,b), b => array (b,a), c => array (a,b,c)
我尝试使用for循环并取消设置,但它会更改我的索引。是否有一个简单的函数如何检查重复值并删除整个键?我使用字符串abcdef生成我的多维数组的所有组合?
输出应为:a => array (a,b), c => array (a,b,c)
。键b从数组中删除。
该函数需要检查键中的每个值与其他每个键值。这是关于删除所有排列。
我试过这个但是它会破坏我的索引并且整个数组都搞砸了:
for($i=0;$i<=count($newarr[$i]);++$i)
{
for($k=0;$k<=count($newarr[$i]["grp"]);++$k)
{
$plz=$newarr[$i]["grp"][$k]["plz"];
$rank=$newarr[$i]["grp"][$k]["rank"];
for($j=$i+1;$j<=count($newarr);++$j)
{
if (!$skip[$j])
{
for ($l=0;$l<=count($newarr[$j]["grp"]);++$l)
{
if ($plz==$newarr[$j]["grp"][$l]["plz"]
&& $rank==$newarr[$j]["grp"][$l]["rank"]
)
{
unset($newarr[$j]["grp"][$l]);
//$newarr=array_values($newarr);
}
}
}
}
}
}
答案 0 :(得分:2)
试试这个,
$array = array( 'a' => array(a,b), 'b' => array(b,a), 'c' => array(a,b,c));
$arrTemp = array();
foreach($array as $key => $innerArr)
{
foreach($array as $key1 => $innerArr1) //
{
if($key != $key1) // compare if key is not same
{
sort($innerArr); // sort array
sort($innerArr1); // sort array
if($innerArr == $innerArr1 && !in_array($key1,$arrTemp)) // check is array is same but array key is diffrent
{
unset($array[$key1]); // unset array
$arrTemp[] = $key; // make entry for not to compare further
}
}
}
}
echo "<pre>"; print_r($array);
答案 1 :(得分:1)
所以这就是你如何完成这项工作:
$array = array('a' => array('a', 'b'), 'b' => array('b', 'a'), 'c' => array('a', 'b', 'c')); // Test data
$temp = $array; // temp array
foreach($array as $i => $o){
array_multisort($temp[$i]); // sorting the multi temp array
}
foreach($temp as $k => &$v){
foreach($temp as $m => &$n){
if($k != $m && $v == $n){unset($array[$m], $temp[$m]);} // removing duplicates
}
}
print_r($array); // printing results
<强>输出:强>
Array
(
[a] => Array
(
[0] => a
[1] => b
)
[c] => Array
(
[0] => a
[1] => b
[2] => c
)
)