私の質問を明確にします。配列リストオブジェクトの日付(プロパティ)が他のオブジェクト日付の15日以内であれば削除します
私はオブジェクトの配列リストを持っています。そのプロパティの1つは日付です。配列の各オブジェクト間の最小間隔が15日であるオブジェクトのリストが必要です。
{
"id": 1,
"date" : "21-04-2017",
"report" : "Temp",
"Test" : "7500000"
}
{
"id": 2,
"dateReported" : "29-03-2017",
"report" : "Temp",
"Test" : "7500000"
},
{
"id": 3,
"dateReported" : "29-03-2017",
"report" : "Temp",
"Test" : "7500000"
},
{
"id": 4,
"dateReported" : "23-03-2017",
"report" : "Temp",
"Test" : "7500000"
},
{
"id": 5,
"dateReported" : "02-02-2017",
"report" : "Temp",
"Test" : "7500000"
},
{
"id": 6,
"dateReported" : "01-02-2017",
"report" : "Temp",
"Test" : "7500000"
}`
上記リスト、オブジェクトIDで
:1、2、5ため例えばオブジェクトIDの結果でなければならない。図3は、オブジェクトIDの15日以内である:2と同様にID:4とオブジェクトID: 6はオブジェクトID:15の15日以内です。
私はオブジェクトIDを削除することができています次のコードを書かれている:ループ内の3及び6が、私は、オブジェクトIDを削除することができません:4オブジェクトIDの15日以内にもある:2
$finalFilteredList = [];
// Filter out array objects, if any array objects have dates with in 15 days.
for ($index = 0, $j = 0; $index < count($intermediateList); $index++) {
$counter = $index + 1;
if (isset($intermediateList[$counter])) {
// Find the difference between counter date and index date.
$diffTimePeriod = date_diff(date_create($intermediateList[$counter]['date']), date_create($intermediateList[$index]['date']));
$diffInDays = $diffTimePeriod->format('%d') + (30 * $diffTimePeriod->format('%m')) + (360 * $diffTimePeriod->format('%y'));
if ($diffInDays < 15) {
// Considering as duplicate entry and hence ignoring.
} else {
$finalFilteredList[$j] = $intermediateList[$index];
$j++;
}
}
}
私は上記のコードが動作するようにと、私はそれが今のソートされていると仮定するために、配列をソートする必要があると考えている(複雑さを軽減するために):以下の
は、私が試したPHPコードです。
素晴らしい答えBhaskerを。返信ありがとうございます。私はGlennCavarleをそのシンプルさの答えとしてマークしました。しかし、私は非常に感謝しています。私の論理を継続して理解し、作業コードへのリンクを提供することを嬉しく思います。 –