【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"
}