PHP dizi sorun

3 Cevap php

Ben birlikte bir ankette aynı cevapların sayısına göre insanları karşılaştırır PHP bir senaryo yazıyorum. Ben böyle bir dizi kullanabilirsiniz:

[person ID] => number of answers same

Ben ile karşılaştırarak birine yakın 10 kişi saklamak için.

Ben 10 number of answers same en düşük bulmak ve daha yüksek number of answers same üzerine ve onunla person ID anahtarını değiştirmek için nasıl anlamaya gerekir.

Herhangi bir yardım?

3 Cevap

Bu sadece dizi aynı cevaplar sayısına göre sıralanan tutmak daha kolay olmaz mıydı? Belki de sadece yeni bir kişi eklemek dizi başvurmak ve ilk / son kaldır ..

Çok kolay SQL bu çözebileceğini, ancak PHP yapmak için çalışmak büyük bir gerektirecektir gibi geliyor.

Sen person.number_of_answers için delta göre girdileri sıralamak gerekir. Örn.:

function cmp_by_delta($a, $b) {
  if ($a->delta == $b->delta) {
    return 0;
  }
  return ($a->delta < $b->delta) ? -1 : 1;
}
// calculate delta for each entry
foreach ($entries as $person) {
  $person->delta = abs($target_person->number_of_answers - $person->number_of_answers);
}
// sort entries by delta
usort($entries, 'cmp_by_delta');
// take 10 first matches from sorted array
$10_best_matches = array_slice($entries, 0, 10);

Tabii ki, bu bir veritabanında çok güzel ve çok daha verimli bir şekilde yapılabilir:

select * from people
order by abs(number_of_answers - :target_number_of_answers)
limit 10;