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"];
}
}