2

I have the following code:

$keys = array('2', '2', '6', '10', '10', '10', '13', '13', '13', '13', '13', '13', '13', '13', '13', '13', '15', '16', '18', '18', '18', '18', );
$values = array('1712', '1712', '1977', '231', '245', '245', '11', '11', '1121', '1121', '1121', '141', '144', '144', '145', '16', '1980', '153', '153', '171', '171', '183');
$result = array();
foreach ($keys as $i => $k){
    $result[$k][] = $values[$i];
}
print_r($result);

Which outputs:

Array (
    [2] => Array ([0] => 1712 [1] => 1712 )
    [6] => Array ([0] => 1977)
    [10] => Array ([0] => 231 [1] => 245 [2] => 245)
    [13] => Array ([0] => 11 [1] => 11 [2] => 1121 [3] => 1121 [4] => 1121 [5] => 141 [6] => 144 [7] => 144 [8] => 145 [9] => 16)
    [15] => Array ([0] => 1980)
    [16] => Array ([0] => 153)
    [18] => Array ([0] => 153 [1] => 171 [2] => 171 [3] => 183)
)

I would like the "sub arrays" to be unique to each key like the following output - (unique arrays):

Array (
    [2] => Array ([0] => 1712)
    [6] => Array ([0] => 1977)
    [10] => Array ([0] => 231 [1] => 245)
    [13] => Array ([0] => 11 [1] => 1121 [2] => 141  [3] => 144 [4] => 145 [5] => 16)
    [15] => Array ([0] => 1980)
    [16] => Array ([0] => 153)
    [18] => Array ([0] => 153 [1] => 171 [2] => 183)
)
sectus
  • 15,605
  • 5
  • 55
  • 97
Bernedette
  • 15
  • 3

3 Answers3

3

Use array_unique via array_map

$result = array_map('array_unique', $result);
sectus
  • 15,605
  • 5
  • 55
  • 97
0

Call the array_unique() function on each subarray:

foreach ($result as $key => $subArray) {
    $result[$key] = array_unique($subArray);
}
reformed
  • 4,505
  • 11
  • 62
  • 88
0

After building sub-array, you need to remove the duplicates from the sub-array, like:

  foreach ($result as $ind => $sub_arr)
  {
      $result[$ind] = array_unique($sub_arr);
  }

Try this :

 $keys = array('2', '2', '6', '10', '10', '10', '13', '13', '13', '13', '13', '13', '13', '13', '13', '13', '15', '16', '18', '18', '18', '18' );

 $values = array('1712', '1712', '1977', '231', '245', '245', '11', '11', '1121', '1121', '1121', '141', '144', '144', '145', '16', '1980', '153', '153', '171', '171', '183');
$result = array();
foreach ($keys as $i => $k){
    $result[$k][] = $values[$i];

}

foreach ($result as $ind => $sub_arr)
{
    $result[$ind] = array_unique($sub_arr);
}

print_r($result);
?>

Output :

Array (
    [2] => Array ([0] => 1712 [1] => 1712 )
    [6] => Array ([0] => 1977)
    [10] => Array ([0] => 231 [1] => 245 [2] => 245)
    [13] => Array ([0] => 11 [1] => 11 [2] => 1121 [3] => 1121 [4] => 1121 [5] => 141 [6] => 144 [7] => 144 [8] => 145 [9] => 16)
    [15] => Array ([0] => 1980)
    [16] => Array ([0] => 153)
    [18] => Array ([0] => 153 [1] => 171 [2] => 171 [3] => 183)
)
Makesh
  • 1,236
  • 1
  • 11
  • 25
  • Really? You could have edited my `for` to a `foreach` instead of post an entirely different answer. – reformed Feb 26 '15 at 07:01
  • I already composed my answer and glimsed at your answer and found wont work and then I hit "submit" for my answer – Makesh Feb 26 '15 at 07:03