2つの値が一致する場合、PHPの多次元連想配列から重複を削除します。
-
26-12-2019 - |
質問
私は次の構造の多次元配列を持っており、それから重複を除去したいです。たとえば、["ameth"が2つの["CITITE"の場合は同じである場合は同じでも異なっていても、これは重複していて、このノードを配列から削除したいです。
以下の例では、都市と金額がノード1と同じであるため、配列から完全なノード0を削除したいと思います。15と17:16。
この場合と同じように、その後、後で削除します。
array(8) {
[0]=>
array(3) {
["time"]=>
string(5) "17:16"
["city"]=>
string(33) "Bristol (Bristol, United Kingdom)"
["amount"]=>
int(373)
}
[1]=>
array(3) {
["time"]=>
string(5) "17:15"
["city"]=>
string(33) "Bristol (Bristol, United Kingdom)"
["amount"]=>
int(373)
}
[2]=>
array(3) {
["time"]=>
string(5) "17:16"
["city"]=>
string(37) "Wednesbury (Sandwell, United Kingdom)"
["amount"]=>
int(699)
}
[3]=>
array(3) {
["time"]=>
string(5) "17:16"
["city"]=>
string(45) "Wolverhampton (Wolverhampton, United Kingdom)"
["amount"]=>
int(412)
}
[4]=>
array(3) {
["time"]=>
string(5) "17:15"
["city"]=>
string(33) "Swansea (Swansea, United Kingdom)"
["amount"]=>
int(249)
}
[5]=>
array(3) {
["time"]=>
string(5) "17:16"
["city"]=>
string(39) "Watford (Hertfordshire, United Kingdom)"
["amount"]=>
int(229)
}
[6]=>
array(3) {
["time"]=>
string(5) "17:14"
["city"]=>
string(39) "Nottingham (Nottingham, United Kingdom)"
["amount"]=>
int(139)
}
[7]=>
array(3) {
["time"]=>
string(5) "17:13"
["city"]=>
string(31) "Dartford (Kent, United Kingdom)"
["amount"]=>
int(103)
}
}
. 解決
<?php
$data = array(
array(
'time' => '17:16',
'city' => 'Bristol',
'amount' => 373,
),
array(
'time' => '18:16',
'city' => 'Bristol',
'amount' => 373,
),
array(
'time' => '18:16',
'city' => 'Wednesbury',
'amount' => 699,
),
array(
'time' => '19:16',
'city' => 'Wednesbury',
'amount' => 699,
),
);
$tmp = array();
foreach ($data as $row) {
$city = $row['city'];
$amount = $row['amount'];
if (!isset($tmp[$city][$amount])
|| $tmp[$city][$amount]['time'] < $row['time']) {
$tmp[$city][$amount] = $row;
}
}
$data = array();
foreach ($tmp as $cities) {
foreach ($cities as $city) {
$data[] = $city;
}
}
var_dump($data);
. 他のヒント
これを試してみてください:
$result = array();
foreach ($array as $place) {
if (!array_key_exists($place['time'], $result)) {
$result[$place['time']] = $place;
}
}
. 2次元連想配列を作成し、1つのディメンションが都市から鍵となり、もう1つは金額です。
$assoc = array();
foreach ($data as $el) {
$city = $el['city'];
$amount = $el['amount'];
if (isset($assoc[$city]) {
$assoc[$city][$amount] = $el;
} else {
$assoc[$city] = array($amount => $el);
}
}
// Now gather up all the elements back into a single array
$result = array();
foreach ($assoc as $cities)
foreach ($cities as $city) {
$result[] = $city;
}
}
. 所属していません StackOverflow