How to filter an array to give unique elements according to one or more columns. Example:
JavaScript
x
array(
array('name'=>'toto', 'type'=>'1', 'type2'=> '2')
array('name'=>'tata', 'type'=>'1', 'type2'=> '3')
array('name'=>'titi', 'type'=>'1', 'type2'=> '2')
array('name'=>'tutu', 'type'=>'2', 'type2'=> '4')
array('name'=>'tete', 'type'=>'3', 'type2'=> '2')
)
If we choose type and type2 as the unique column. The result of the algorithm should gives
JavaScript
array(
array('name'=>'toto', 'type'=>'1', 'type2'=> '2')
array('name'=>'tata', 'type'=>'1', 'type2'=> '3')
array('name'=>'tutu', 'type'=>'2', 'type2'=> '4')
array('name'=>'tete', 'type'=>'3', 'type2'=> '2')
)
I can think of an algorithm by hashing the type concatenate with type2, store in a table and using isset to find the existence. But I’m not sure that’s the best algorithm.
Advertisement
Answer
All you need is
JavaScript
$data = array(
array('name'=>'toto', 'type'=>'1', 'type2'=> '2'),
array('name'=>'tata', 'type'=>'1', 'type2'=> '3'),
array('name'=>'titi', 'type'=>'1', 'type2'=> '2'),
array('name'=>'tutu', 'type'=>'2', 'type2'=> '4'),
array('name'=>'tete', 'type'=>'3', 'type2'=> '2')
);
$tmp = array();
foreach($data as $v) {
$id = $v['type'] . "|" . $v['type2'];
isset($tmp[$id]) or $tmp[$id] = $v;
}
print_r(array_values($tmp));