PHP expert |
|
Ik ben bezig met een functie om alle dubbele array items te verwijderen.
Dit klinkt misschien nutteloos, maar ik ben bezig met iets groot en dit is de laatste schakel.
Stel mijn array (het is een 2D array) ziet er zo uit:
<?php
$arr = array(
array(
1=>1,
2=>5
),
array(
1=>1,
2=>5
),
array(
1=>2,
2=>7
)
);
?>
<?php 1=>1, 2=>5 ), 1=>1, 2=>5 ), 1=>2, 2=>7 ) ); ?>
Dan zie je dat het 1e en 2e item overeen komen. Beiden zijn arrays met dezelfde structuur. Het gaat me grotendeels om het eerste item van beide arrrays. Dus die "1=>1". Dus elk 1e item van mijn arrays moet identiek zijn.
Zodat mijn structuur er zo uit ziet na de schoonmaak:
<?php
$arr = array(
array(
1=>1,
2=>5
),
array(
1=>2,
2=>7
)
);
?>
<?php 1=>1, 2=>5 ), 1=>2, 2=>7 ) ); ?>
Nu heb ik hier een functie voor geschreven. Het spijtige is dat hij beide items verwijderd (dus het 1e en het 2e). Dus alle dubbele items + de originele worden verwijderd. Alleen de identieke blijven staan.
Misschien bestaat hier al een functie voor. Zoja: gelieve te zeggen welke, want ik heb me al suf gezocht.
Ik ben dus begonnen aan een functie zelf te schrijven:
<?php
function deleteDubbelItems($arr){
$geweest=array();
$ret=array();
for($i=0;$i<count($arr);$i++){
if(!in_array($arr[$i][1],$geweest)){
$geweest[]=$arr[$i][1];
$ret=$arr[$i];
}
}
return $ret;
}
?>
<?php function deleteDubbelItems($arr){ for($i=0;$i<count($arr);$i++){ $geweest[]=$arr[$i][1]; $ret=$arr[$i]; } } return $ret; } ?>
Maar die verwijderd dus alle dubbele items ipv er 1 te laten staan.
Iemand een idee?
edit
mijn fout. Ik was een [] vergeten, nu werkt alles perfect, voor de mensen die het mocht interesseren. Dit is de code:
<?php
function deleteDubbelItems($arr){
$geweest=array();
$ret=array();
for($i=0;$i<count($arr);$i++){
if(!in_array($arr[$i][1],$geweest)){
$geweest[]=$arr[$i][1];
$ret[]=$arr[$i];
}
}
return $ret;
}
?>
<?php function deleteDubbelItems($arr){ for($i=0;$i<count($arr);$i++){ $geweest[]=$arr[$i][1]; $ret[]=$arr[$i]; } } return $ret; } ?>
|