在PHP上管理数组

时间:2016-10-13 09:14:28

标签: php

我正在创建一个php脚本,我希望输出如下。 我有这段代码:

$query_man = query
$output_man = mysql_query($query_man);

if(mysql_num_rows($output_man) > 0){

while ($row = mysql_fetch_assoc($output_manutenzione)){

    echo "\t" . $row['hostname'];
    echo "\n\t\tTipo Manutenzione: " . $row['type'];
    echo "\n\t\tData inizio: " . $row['startdate'];
    echo "\n\t\tData fine: " . $row['enddate'];
    echo "\n\t\tUtente: " . $row['user'];
    echo "\n\t\tMotivo: " . $row['desc'];
    echo "\n\t\tStato: " . $row['State'] . "\n\n";
}

其中type,startdate,enddate等是查询字段。

通过这种方式,我得到了这样的结果(例如):

Hello1
   program
   2016-10-13 09:00
   2016-10-13 10:00
   kevin
   test
   open

Hello1
   program
   2016-10-13 13:00
   2016-10-13 15:30
   john
   test
   closed

Hello2
   program
   2016-10-12 11:00
   2016-10-13 11:30
   susan
   test
   closed

Hello3
   program
   2016-10-12 13:00
   2016-10-12 15:30
   clay
   test2
   open

好吧,我不明白如何获得以下结果:

Hello1
   program
   2016-10-13 09:00
   2016-10-13 10:00
   kevin
   test
   open

   program
   2016-10-13 13:00
   2016-10-13 15:30
   john
   test
   closed

Hello2
   program
   2016-10-12 11:00
   2016-10-13 11:30
   susan
   test
   closed

Hello3
   program
   2016-10-12 13:00
   2016-10-12 15:30
   clay
   test2
   open

即。我想用相同的主机名对信息进行分组。 我该怎么办?

4 个答案:

答案 0 :(得分:4)

如果你还记得你处理过的最后一个hostname,你可以针对当前的hostname进行测试,只有当它们不同时输出$query_man = query $output_man = mysql_query($query_man); if(mysql_num_rows($output_man) > 0){ $last_host = NULL; while ($row = mysql_fetch_assoc($output_manutenzione)){ if ($row['hostname'] != $last_host ) { echo "\t" . $row['hostname']; $last_host = $row['hostname']; } echo "\n\t\tTipo Manutenzione: " . $row['type']; echo "\n\t\tData inizio: " . $row['startdate']; echo "\n\t\tData fine: " . $row['enddate']; echo "\n\t\tUtente: " . $row['user']; echo "\n\t\tMotivo: " . $row['desc']; echo "\n\t\tStato: " . $row['State'] . "\n\n"; } }

hostname

这确实假设查询在PDO上排序,但您的示例输出按这种方式排序,因此我假设您已经这样做了

  

但我必须添加这个

     

每次使用the mysql_    新代码中的数据库扩展     a Kitten is strangled somewhere in the world 它已被弃用,已经存在多年,并且在PHP7中一直存在。   如果您只是学习PHP,请花时间学习mysqli或{{1}}数据库扩展。   Start here

答案 1 :(得分:1)

您只需检查上一个 UserId,如下所示:

hostname

答案 2 :(得分:1)

记住$row['hostname']值并检查它是否与上一行相同。如果没有,请回显值:

$query_man = query
$output_man = mysql_query($query_man);

if(mysql_num_rows($output_man) > 0){

    $prevHostname = '' ;
    while ($row = mysql_fetch_assoc($output_manutenzione)){
        if ($prevHostname != $row['hostname']) {
            echo "\t" . $row['hostname'];
            $prevHostname = $row['hostname'];
        }
        echo "\n\t\tTipo Manutenzione: " . $row['type'];
        echo "\n\t\tData inizio: " . $row['startdate'];
        echo "\n\t\tData fine: " . $row['enddate'];
        echo "\n\t\tUtente: " . $row['user'];
        echo "\n\t\tMotivo: " . $row['desc'];
        echo "\n\t\tStato: " . $row['State'] . "\n\n";
    }
}

答案 3 :(得分:0)

尝试以下代码。您需要在代码中进行一些更改,如下所示,另外使用另一个数组

<?php $query_man = query
$output_man = mysql_query($query_man);

$array_result = array();
if(mysql_num_rows($output_man) > 0){

while ($row = mysql_fetch_assoc($output_manutenzione)){

    echo "\t" . $row['hostname'];
    echo "\n\t\tTipo Manutenzione: " . $row['type'];
    echo "\n\t\tData inizio: " . $row['startdate'];
    echo "\n\t\tData fine: " . $row['enddate'];
    echo "\n\t\tUtente: " . $row['user'];
    echo "\n\t\tMotivo: " . $row['desc'];
    echo "\n\t\tStato: " . $row['State'] . "\n\n";
    $array_result[$row['hostname']][] = $row;
}
print_r($array_result) ?>