从php中获取数组的结果

I have an array look like this ,it is the result of a db select operation.

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => shamonsha
            [username] => sham1s670
            [password] => 5hYZJPu3s/oAE7KbFfgsvQfX4/GCvnK1MpR0bIbWWxroUgLb+E3M7/AFyJNcZ9WirkAGCe6JBofh54dOPENdrg==
            [email] => shamonsha665@gmail.com
            [mobile_number] => 7736527089
            [address] => hk
            [date] => 24 Dec 2015 01:32:53
            [active] => 1
            [commission] => 25
            [agent_id] => 1
            [ticket_number] => ETS263B0PT10469
            [refund_amount] => 700
            [date_of_cancel] => 28-Jan-2016
        )

    [1] => Array
        (
            [id] => 2
            [name] => shamonsha
            [username] => sham1s670
            [password] => 5hYZJPu3s/oAE7KbFfgsvQfX4/GCvnK1MpR0bIbWWxroUgLb+E3M7/AFyJNcZ9WirkAGCe6JBofh54dOPENdrg==
            [email] => shamonsha665@gmail.com
            [mobile_number] => 7736527089
            [address] => hk
            [date] => 24 Dec 2015 01:32:53
            [active] => 1
            [commission] => 25
            [agent_id] => 1
            [ticket_number] => ETS311B0PT10470
            [refund_amount] => 700
            [date_of_cancel] => 28-Jan-2016
        )

    [2] => Array
        (
            [id] => 3
            [name] => shamonsha
            [username] => sham1s670
            [password] => 5hYZJPu3s/oAE7KbFfgsvQfX4/GCvnK1MpR0bIbWWxroUgLb+E3M7/AFyJNcZ9WirkAGCe6JBofh54dOPENdrg==
            [email] => shamonsha665@gmail.com
            [mobile_number] => 7736527089
            [address] => hk
            [date] => 24 Dec 2015 01:32:53
            [active] => 1
            [commission] => 25
            [agent_id] => 1
            [ticket_number] => ETS788B0PT10472
            [refund_amount] => 395
            [date_of_cancel] => 28-Jan-2016
        )

    [3] => Array
        (
            [id] => 4
            [name] => shamonsha
            [username] => sham1s670
            [password] => 5hYZJPu3s/oAE7KbFfgsvQfX4/GCvnK1MpR0bIbWWxroUgLb+E3M7/AFyJNcZ9WirkAGCe6JBofh54dOPENdrg==
            [email] => shamonsha665@gmail.com
            [mobile_number] => 7736527089
            [address] => hk
            [date] => 24 Dec 2015 01:32:53
            [active] => 1
            [commission] => 25
            [agent_id] => 1
            [ticket_number] => ETS562B0PT10471
            [refund_amount] => 395
            [date_of_cancel] => 28-Jan-2016
        )

    [4] => Array
        (
            [id] => 5
            [name] => shamonsha
            [username] => sham2s7b8
            [password] => dN0Br+3D86pGTAhlvOJ4OD6YH1KVHL/SkfYOu71Do7OCxrRnMIq9CLVWX7mpTnJso1pYxVwvjzFWo1a1GVq+8Q==
            [email] => shamonsha665@gmail.com
            [mobile_number] => 7736527089
            [address] => jk
            [date] => 24 Dec 2015 01:33:20
            [active] => 1
            [commission] => 0
            [agent_id] => 2
            [ticket_number] => ETS562B0PT10471
            [refund_amount] => 395
            [date_of_cancel] => 28-Jan-2016
        )

)

From this i want to display ticket_amount, refund_amount and date_of_cancel for each username like this way Eg:

Username:sham1s670
  ticket-no:ETS263B0PT10469 ,refund-amount:700, cancel-data:28-Jan-2016
  ticket-no:ETS263B0PT10461 ,refund-amount:500, cancel-data:28-Jan-2016
  ticket-no:ETS263B0PT10462 ,refund-amount:200, cancel-data:28-Jan-2016

Username:sham1s674
  ticket-no:ETS263B0PT10462 ,refund-amount:700, cancel-data:28-Jan-2016
  ticket-no:ETS263B0PT10468 ,refund-amount:600, cancel-data:28-Jan-2016
  ticket-no:ETS263B0PT10469 ,refund-amount:200, cancel-data:28-Jan-2016

Here is my tried code

$i=0;
foreach($result as $value)
{
    $old = $value['username'];
    if($old==$value['username'])
    {
        if($i==0){
            echo 'Username'.$value['username'];
            echo '<br>';
        }
        echo "TIcket-no".$value['ticket_number'].'Refund-amound'.$value['refund_amount'].'Cancel-date'.$value['date_of_cancel'];

        $i++;
    }
    else
    {
        $old='';
        $i=0;
    }
}

But it didn't give me the expected result?

Its not giving the desired result because $old will never be like $value['username'] (you never start that), hense always triggering else option.

You must either rewrite the query and group by user, or sort the results after they have been parsed to match user with tickets

Untested:

<?php

  $data = array();
  $output = false;

  // this first foreach could be done on db fetch rows instead
  foreach ( $result as $value ) {

      $data[$value['username']][] = 'TIcket-no ' . $value['ticket_number'] . ', Refund-amound ' . $value['refund_amount'] . ', Cancel-date ' . $value['date_of_cancel'];

  }

  foreach( $data as $username => $list ) {

    $output .= '<p>Username ' . $username . '<br>';
    $output .= implode( '<br>', $list );
    $output .= '</p>';

  }

  echo $output;

?>

** UPDATE PER REQUEST **

Add users name (still untested)

<?php

  $data = array();
  $output = false;

  // this first foreach could be done on db fetch rows instead
  foreach ( $result as $value ) {

      if ( !isset( $data[$value['username']]['name'] ) ) {
        $data[$value['username']]['name'] = $value['name'];
      }
      $data[$value['username']]['data'][] = 'TIcket-no ' . $value['ticket_number'] . ', Refund-amound ' . $value['refund_amount'] . ', Cancel-date ' . $value['date_of_cancel'];

  }

  foreach( $data as $username => $dataset ) {

    $output .= '<p>Name: ' . $dataset['name'] . '<br>';
    $output .= 'Username: ' . $username . '<br>';
    $output .= implode( '<br>', $dataset['data'] );
    $output .= '</p>';

  }

  echo $output;

?>

Try this (untested!), assuming you sort the result by username

$old='';
foreach($result as $value)
{
    if($old==$value['username'])
    {   
        echo "TIcket-no".$value['ticket_number'].'Refund-amound'.$value['refund_amount'].'Cancel-date'.$value['date_of_cancel'];

    }
    else
    {

        echo 'Username'.$value['username'];
        echo '<br>';
    }
    $old = $value['username'];
}

You can sort your results with a new array.

Like this :

<?php
$NewTab = array();
foreach($results as $val) {
    $NewTab[$val["username"]][] = $val;
}

foreach($NewTab as $username => $entries) {
    echo "Username:", $username;
    foreach($entries as $entry) {
        echo "ticket-no: ", $entry["ticket_amount"];
        echo ", refund-amount: ", $entry["refund_amount"];
        echo ", date_of_cancel: ", $entry["date_of_cancel"];
    }
}