简体   繁体   English

从PHP数组获取结果

[英]Getting result from array in 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: 从这个我想显示每个用户名的ticket_amountrefund_amountdate_of_cancel像这样:

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? 但这没有给我预期的结果吗?

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

Its not giving the desired result because $old will never be like $value['username'] (you never start that), hense always triggering else option. 由于$ old永远不会像$ value ['username'](您永远不会那样),因此hense不会触发预期的结果,因此hense总是会触发else选项。

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;

?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM