Yeni bir dizi olarak bir Array alanları saklamak mümkün mü?

4 Cevap php

Benim CakePHP uygulamasında, ben 'çizelgeleri' adında bir tablo sonuçlarında çekiyorum. Bu tablo, bir yarış için bir athlete_id ve birkaç bölünmüş kez sahiptir. Ben başka bir sporcu (örneğin, hızlı bitiş zamanı ve yavaş arasındaki farkı hesaplamak) göre bir sporcunun zamanlarda bazı hesaplamalar yapmak gerekir.

Bunu yapmak için en iyi yolu üzerinde min () fonksiyonunu çalıştırmak, sonra yeni bir dizide her sporcuların 'bitirmek' depolamak için olacağını düşündüm. Beni yaşam için, ben bu işe alınamıyor ...

Eğer ben bu yanlış şekilde yaklaşıyorum, ya da sadece bir şey eksik düşünüyor musunuz?

foreach ($timesheet['Run'] as $run):
	<tr<?php echo $class;?>>
		<td><?php echo $run['athlete_id'];?></td>
		<td><?php echo $run['start'];?></td>
		<td><?php echo $run['split1'];?></td>
		<td><?php echo $run['split2'];?></td>
		<td><?php echo $run['split3'];?></td>
		<td><?php echo $run['split4'];?></td>
		<td><?php echo $run['split5'];?></td>
		<td><?php echo $run['split6'];?></td>
		<td><?php echo $run['finish'];?></td>
    </tr>
   endforeach

4 Cevap

Eğer order by finish asc veritabanından, sen (kısalık için böler atlama) böyle bir şey yapabileceğini ile takvim getiriliyor varsayarsak:

$fastest = $previous = $timesheet['Run'][0]['finish'];
foreach ($timesheet['Run'] as $run):
    <tr>
        <td><?php echo $run['athlete_id'];?></td>
        <td><?php echo $run['finish'];?></td>
        <td><?php echo $previous - $run['finish'];?></td>
        <td><?php echo $fastest - $run['finish'];?></td>
    </tr>
    $previous = $run['finish'];
endforeach

Bu, böyle satır vermelidir:

id | finished_in | to_previous  | to_best
1  | 120         | 0            | 0
2  | 121.5       | -1.5         | -1.5
3  | 121.8       | -0.3         | -1.8
4  | 122.6       | -0.8         | -2.6
...

Başka bir seçenek $ hızlı ve daha önceki $ ve başka ne hesaplamak isteyebilirsiniz encapsuling, bir nesne ya da belki bir ArrayIterator haline döndü dizi sarın ve iç calulcations yapmak olacaktır.

Ben foreach ve a etrafında uygun etiketleri var sanacaklar ';' endforeach sonra.

Yani soru olur sen ['Run'] [0] ['athlete_id'] $ çizelgesini erişebilir? Sen $ çizelgesi bunu düşünüyorum şeklinde olduğundan emin olmak için () print_r kullanabilirsiniz.

I usort gibi bir şey kullanarak içine bakmak istiyorum. Sen 'bitirmek' tuş ederek $ çizelgesi ['Run'] dizi sıralamak için bir geri çağırma işlevi tanımlayabilirsiniz. Sonunda, dizideki ilk giriş, doğru tanımlanmış ise, kısa bitiş zaman olacaktır.

Örneğin:

function cmp($a, $b)
{
   if ($a['finish'] == $b['finish'])
   { 
      return 0;
   }

   return ($a['finish'] < $b['finish']) ? -1 : 1;
}

usort($timesheet['Run'], "cmp");

Ben hesaplama yapıyor ve denetleyicisi ve SQL sıralama ya da tavsiye.