【PHP】重複したレコードを削除する

php

重複したレコードを削除する

例えば、次の配列があったとして、nameが重複しない新しい配列を作りたい。
in_arrayを使うとO(n)の処理になるので、別なものを使いたい。

$array = [
    [
        'id' => 1,
        'name' => 'taro',
    ],
    [
        'id' => 2,
        'name' => 'akira',
    ],
    [
        'id' => 3,
        'name' => 'yumi',
    ],
    [
        'id' => 4,
        'name' => 'taro',
    ], 
];


/*
array(4) {
  [0]=>
  array(2) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(4) "taro"
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(5) "akira"
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(4) "yumi"
  }
  [3]=>
  array(2) {
    ["id"]=>
    int(4)
    ["name"]=>
    string(4) "taro"
  }
}
*/

in_array

$new= [];
foreach ($array as $people){
   if (!in_array($people['name'], $new)) {
      $new[] = $people['name'];
   }
}

array_keys

$new = [];
foreach ($array as $people){
    $new[$people['name']] = true;
}
$unique_names = array_keys($new);

array_unique

$new = [];
foreach ($array as $people){
    $new[] = $v['name'];
}
$unique_names = array_unique($new);

array_unique、array_column

$unique_names = array_unique(array_column($array, 'name'));

いずれも、以下の通り。

array(3) {
  [0]=>
  string(4) "taro"
  [1]=>
  string(5) "akira"
  [2]=>
  string(4) "yumi"
}

php, programming

Posted by 異世界攻略班