ここでは比較対象の2つの配列があります。PHPの効率的な比較方法
array_a(
[0] => array('userid' => aaa, 'created_time' => XXXX,),
[1] => array('userid' => bbb, 'created_time' => XXXX,),
[2] => array('userid' => ccc, 'created_time' => XXXX,)
)
array_b(
[0] => array('userid' => aaa, 'created_time' => XXXX,),
[1] => array('userid' => ccc, 'created_time' => XXXX,),
[2] => array('userid' => ddd, 'created_time' => XXXX,)
)
私は、次の条件に一致するすべての要素を取得したい: ARRAY_AのユーザーIDがarray_bにあり、 ARRAY_AのCREATED_TIMEは、より新しいarray_bの
私はこれを行うには、次のコードを使用しますが、それがかかりますアレイが巨大であれば長い時間です。
for array_a{
for array_b{
if (a[user_id] = b[user_id] && a[created_time] > b[created_time]) {
//target got
}
}
}
このロジックを効率的に行う方法はありますか?
ありがとうございます。 IDは一意です。 変換する方法 array_a([0] =>配列( 'userid' => aaa、 'created_time' => XXXX)、 [1] =>配列( 'userid' => bbb、 'created_time' => XXXX、bbb => XXXX) ? array(aaa => XXXX、bbb => XXXX)
ここでできることは、配列を 'array(' aaa '=> XXXX、' bbb '=> XXXX) 'のように変更することだけです。特にデータがこのフォーマットになる前にそれを行うことができれば(それは仕事にはあまり適していません)。 – Jon
すべてのユーザIDが一意の場合は、配列Bを 'arrayB [user_id] => created_time'にマッピングすることができます。次に、配列Aを繰り返し処理し、配列BのユーザIDを参照するだけです( 'O(1)')。それは 'O(n^2)'の代わりに 'O(2n)'のまわりです。 –
ユーザーIDはソート順になっていますか? – Jack