Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP上管理数组_Php - Fatal编程技术网

在PHP上管理数组

在PHP上管理数组,php,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 Manute

我正在制作一个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

   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
i、 我想用相同的主机名对信息进行分组。
我该怎么办?

您只需检查前面的主机名,如下所示:

$prev_hostname = "";
while ($row = mysql_fetch_assoc($output_manutenzione)){
    if ($prev_hostname !== $row['hostname']) 
        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";

    $prev_hostname = $row['hostname'];
}

您只需检查前面的主机名,如下所示:

$prev_hostname = "";
while ($row = mysql_fetch_assoc($output_manutenzione)){
    if ($prev_hostname !== $row['hostname']) 
        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";

    $prev_hostname = $row['hostname'];
}

记住
$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";
    }
}

记住
$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";
    }
}

如果您记得您处理的最后一个
主机名
,则可以将其与当前主机名进行测试,并且仅当它们在
主机名
行的输出中不同时

$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";
    }
}
这确实假设查询是按主机名排序的,但是您的示例输出是按这种方式排序的,所以我假设您已经这样做了

但我必须补充一点

每次使用 新代码中的数据库扩展 它已被弃用多年,并在PHP7中永远消失。 如果你只是在学习PHP,那么就把精力花在学习
PDO
mysqli
数据库扩展上。


如果您记得您处理的最后一个
主机名
,则可以将其与当前主机名进行测试,并且仅当它们在
主机名
行的输出中不同时

$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";
    }
}
这确实假设查询是按主机名排序的,但是您的示例输出是按这种方式排序的,所以我假设您已经这样做了

但我必须补充一点

每次使用 新代码中的数据库扩展 它已被弃用多年,并在PHP7中永远消失。 如果你只是在学习PHP,那么就把精力花在学习
PDO
mysqli
数据库扩展上。


试试下面的代码。您需要在代码中做一些更改,如下所示,以获取另一个数组

<?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) ?>

尝试下面的代码。您需要在代码中做一些更改,如下所示,以获取另一个数组

<?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) ?>


如果
$row['hostname']
!=
以前的主机名
-输出
$row['hostname']
@Twinfriends很高兴为您服务如果
$row['hostname']
!=
以前的主机名
-output
$row['hostname']
@Twinfriends很高兴为您服务还应该添加这样一条信息,即如果要这样做的话,查询将需要按
主机名
排序。@naomik是的,我只是想添加一下,谢谢你的提醒,如果你自己在提供的代码中使用了PDO,你的答案会更好,但我还是投了赞成票p@ChristianF是的,我同意,但由于OP不太可能从
mysql\uUcode>跳到
PDO
,我认为这是在浪费我的时间和磁盘空间。我非常赞成将它们拖到现在,如果需要的话,踢踢和尖叫。最好在坏习惯形成之前,尽快结束它不管怎样,这只是一个小小的吹毛求疵。正如我所说的,你的回答很好。您已经以良好的方式介绍了所有相关内容。还应该补充一点,如果这项功能正常,查询将需要按
主机名进行排序。@naomik Yup我只是想补充一点,谢谢您的提醒。如果您自己在提供的代码中使用PDO,您的答案会更好,但我仍然投了赞成票p@ChristianF是的,我同意,但由于OP不太可能从
mysql\uUcode>跳到
PDO
,我认为这是在浪费我的时间和磁盘空间。我非常赞成将它们拖到现在,如果需要的话,踢踢和尖叫。最好在坏习惯形成之前,尽快结束它不管怎样,这只是一个小小的吹毛求疵。正如我所说的,你的回答很好。你已经很好地涵盖了所有相关内容。