2011-05-23 3 views
0

Salut travail iam sur le rapport de présence, les données ensemble nous avons:comment rendre les données tabulaires de tableau imbriqué

Array 
(
    [0] => Array 
     (
      [ActatekLog] => Array 
       (
        [id] => 1 
        [timeentry] => 2011-02-16 00:09:02 
        [eventID] => OUT 
        [terminalSN] => 00111DA08C8B 
        [jpegPhoto] => 
       ) 

     ) 

    [1] => Array 
     (
      [ActatekLog] => Array 
       (
        [id] => 1 
        [timeentry] => 2011-02-16 00:09:12 
        [eventID] => IN 
        [terminalSN] => 00111DA08C8B 
        [jpegPhoto] => 
       ) 

     ) 

    [2] => Array 
     (
      [ActatekLog] => Array 
       (
        [id] => 1 
        [timeentry] => 2011-02-16 00:11:31 
        [eventID] => OUT 
        [terminalSN] => 00111DA08C8B 
        [jpegPhoto] => 
       ) 

     ) 

    [3] => Array 
     (
      [ActatekLog] => Array 
       (
        [id] => 1 
        [timeentry] => 2011-02-16 00:11:40 
        [eventID] => IN 
        [terminalSN] => 00111DA08C8B 
        [jpegPhoto] => 
       ) 

     ) 

    [4] => Array 
     (
      [ActatekLog] => Array 
       (
        [id] => 1 
        [timeentry] => 2011-02-16 00:13:17 
        [eventID] => OUT 
        [terminalSN] => 00111DA08C8B 
        [jpegPhoto] => 
       ) 

     ) 

    [5] => Array 
     (
      [ActatekLog] => Array 
       (
        [id] => 1 
        [timeentry] => 2011-02-16 00:13:21 
        [eventID] => IN 
        [terminalSN] => 00111DA08C8B 
        [jpegPhoto] => 
       ) 

     ) 

) 

format du rapport est:

Date  In Time  Out Time Work Time 
2011-02-16 

i besoin d'aide pour l'affichage dans le temps et sortir le temps dans une rangée pour le même jour.

S'il vous plaît aider

+0

Je ne vois que les heures d'entrée. Pourriez-vous expliquer un peu plus ce que nous voyons dans le tableau? – Prikkeldraad

+0

Merci pour la réponse Prikkeldraad, ce que je veux afficher les données sous forme de tableau comme: DATE | DANS LE TEMPS | OUT TIME | HEURES DE TRAVAIL à l'heure et à l'heure de la même date dans une rangée – Tanvier

+0

lorsque j'inspecte votre tableau, j'ai trouvé que toutes les entrées sont faites à la même date et son 2011-02-16 et il y a trois IN et trois Outs. Alors, comment voulez-vous que vous puissiez avoir une ligne basée sur cette information? S'il vous plaît poster les données renvoyées que vous attendez. – Tareq

Répondre

0

J'utilise votre modèle de données ne change jamais et que vos données sont déjà triés la façon dont vous souhaitez qu'il soit trié. Ainsi, pour un tableau comme suit:

$data = array 
(
    0 => array 
    (
     'ActateLog' => array 
     (
      'id' => 1, 
      'timeentry' => '2011-02-16 00:09:02', 
      'eventID' => 'OUT', 
      'terminalSN' => '00111DA08C8B', 
      'jpegPhoto' => false 
     ) 
    ), 
    1 => array 
    (
     'ActateLog' => array 
     (
      'id' => 1, 
      'timeentry' => '2011-02-16 00:09:12', 
      'eventID' => 'IN', 
      'terminalSN' => '00111DA08C8B', 
      'jpegPhoto' => false 
     ) 
    ) 
); 

je fait une fonction, qui retourne un tableau à n/2 rangées et possède fois dans et hors de la même rangée.

function processMyArray($data) 
{ 
    $output = array(); 
    $lim = count($data); 
    $i = $j = 0; 

    for($i=0; $i<$lim; $i+=2, $j++) 
    { 
     $output[$j] = array 
     (
      'date' => substr($data[$i]['ActateLog']['timeentry'], 0, 10), 
      'IN' => substr($data[$i]['ActateLog']['timeentry'], 11), 
      'OUT' => substr($data[$i+1]['ActateLog']['timeentry'], 11), 
      'work_time' => strtotime($data[$i+1]['ActateLog']['timeentry']) - strtotime($data[$i]['ActateLog']['timeentry']) 
     ); 
    } 

    return $output; 
} 
+0

Merci gilden votre solution est grande mais il ya un pépin restant plz m'aider à résoudre ce problème. nous devons créer un rapport de présence pour les jours requis comme 2011-05-01 ~ 2011-05-25.nous avons besoin de passer un tableau dans votre fonction processMyArray() après une condition est correspondance en boucle par jour, – Tanvier

+0

comme celui-ci ' for ($ i = 0; compter i <$; $ i ++) \t {\t \t $ diff3 = daysDifference ($ contents [$ i] ['ActatekLog'] ['timeentry'], $ date); \t \t if ($ diff3 == 0) \t \t {$ sameDay = $ contenu [$ i]; \t \t $ resultat = processMyArray ($ sameDay); \t \t print_r ($ résultat); \t \t} \t \t \t \t} \t \t 'fonction exigent id et nous passons tableau avec clé [ActatekLog] plz aider – Tanvier

+0

problème résolu grâce. tu es une rock star – Tanvier

0

Ici, vous allez ça va le faire si vous n'avez pas deux valeurs dans votre tableau que vous déclarez que vous voulez dans votre table.

<table> 
    <tr> 
     <th>Date</th> 
     <th>Time In</th> 
     <th>Time Out</th> 
     <th>Work Time</th> 
    </tr> 
<?php foreach ($thisArr as $arr) : ?> 
    <tr> 
     <td><?php echo date('Y-m-d'); ?></td> 
     <td><?php echo $arr['ActatekLog']['timeentry']; ?></td> 
     <td><?php echo "no time out in the array??"; ?></td> 
     <td><?php echo "you need to calculate this I assume"; ?></td> 
    </tr> 
<?php endforeach; ?> 
</table> 
+0

Prikkeldraad, problème avec ce code est qu'il ne sera pas affiché dans le temps et l'heure de sortie dans une rangée plutôt dans le temps dans une rangée et hors temps dans la rangée suivante. Je vous remercie de votre aide, mais nous avons besoin de polir, j'ai essayé d'extraire des données dans une liste, mais pas d'utilisation – Tanvier

+0

@Tanvier Je ne suis pas Prikkeldraad et en utilisant votre tableau le code que j'ai posté imprimerait le temps et le temps dans le même rangée pour chaque tableau que vous avez imbriqué .... donc je ne comprends pas ce que vous dites – martynthewolf

1

Je commencerais par formater un peu le tableau de sortie.

$arr = array(); 
foreach ($result as $row) { 
    $arr[ $row[ 'terminalSN' ] ][ $row[ 'eventID' ] ] = $row; 
} 

Ensuite, la sortie devrait être un peu plus facile:

<table> 
    <tr> 
     <th>Date</th> 
     <th>Time In</th> 
     <th>Time Out</th> 
     <th>Work Time</th> 
    </tr> 
    <?php foreach ($arr as $key => $value) : ?> 
     <tr> 
      <td><?php echo date('Y-m-d', strtotime($value[ 'IN' ][ 'timeentry' ])); ?></td> 
      <td><?php echo date('H:i:s', strtotime($value[ 'IN' ][ 'timeentry' ])); ?></td> 
      <td><?php echo date('H:i:s', strtotime($value[ 'OUT' ][ 'timeentry' ])); ?></td> 
      <td><?php echo "Calculate based on out minus in. Pretty simple at this point." ?></td> 
     </tr> 
    <?php endforeach; ?> 
</table> 
Questions connexes