
前提・実現したいこと
PHPの多次元配列で複数の値が同じ場合削除を行いたいです。
例えば以下の場合、配列の0と2はnameとageの値が同じ削除となり、
Array ( [0] => Array ( [name] => 田中 [age] => 25 [gender] => 女性 ) [1] => Array ( [name] => 樋口 [age] => 32 [gender] => 男性 ) [2] => Array ( [name] => 田中 [age] => 25 [gender] => 男性 ) [3] => Array ( [name] => 鈴木 [age] => 65 [gender] => 男性 ) [4] => Array ( [name] => 田中 [age] => 30 [gender] => 男性 ) )
以下のような配列に作り変えたいです。gendarの重複は考慮しません。
同じ年齢の場合は削除できるようになったのですが、同じ年齢、名前の場合削除する方法がわかりません。
nameとage両方とも重複していた場合に削除、削除するものは古い、先に登録されていたものとしたいです。
この場合どのような処理にしたら良いでしょうか。
Array ( [0] => Array ( [name] => 田中 [age] => 25 [gender] => 女性 ) [1] => Array ( [name] => 樋口 [age] => 32 [gender] => 男性 ) [2] => Array ( [name] => 鈴木 [age] => 65 [gender] => 男性 ) [3] => Array ( [name] => 田中 [age] => 30 [gender] => 男性 ) )
該当のソースコード
function deleteArray($array, $column) { $tmp = []; $uniqueArray = []; foreach ($array as $value) { if (!in_array($value[$column], $tmp)) { $tmp[] = $value[$column]; $uniqueArray[] = $value; } } return $uniqueArray; } deleteArray($array, 'age');
試したこと
ソースコードを以下のように修正してみましたが期待する結果を得られませんでした。
(if文の中に&&で条件を追加)
function deleteArray($array, $column,$column2) { $tmp = []; $uniqueArray = []; foreach ($array as $value) { if (!in_array($value[$column], $tmp) && !in_array($value[$column2], $tmp)) { $tmp[] = $value[$column]; $uniqueArray[] = $value; } } return $uniqueArray; } deleteArray($array, 'age', 'name');
そもそもこのソースだと2つの要素の重複はチェックできず、別の方法に変えないといけないでしょうか。
その際どのような処理を行えばよいか教えていただけると嬉しいです。
回答2件
あなたの回答
tips
プレビュー