从动态数组中获取最新内容

时间:2013-06-17 13:41:56

标签: php

我自己的一个小背景是我对php很新。我是一名IT助理,并被要求编辑我们的设计师用于样本的一个页面。我无法将您指向该页面,因为它是一个内部托管的页面。

老实说,我甚至不确定问题是否正确,但请耐心等待。

该页面在一个表格中有一个“请求完成日期”字段,该列表在列表中输出6个日期,设计者只希望它从该列表中输出最新日期而不是全部6个日期,通常这些日期将为空,因此它不是使用它们打印出来。

放置它们的代码如下;

if ($database_data['request_confirmed_comp_date'] > "0")
{    $request_confirmed_completion_date = date("d/m/Y", $database_data['request_confirmed_comp_date']); }
else
{    $request_confirmed_completion_date = " -";    }

if  $database_data['request_confirmed_comp_date2'] > "0")
{
    $request_confirmed_completion_date2 = date("d/m/Y", $database_data['request_confirmed_comp_date2']);
}
else
{
    $request_confirmed_completion_date2 = " -";
}

if ($database_data['request_confirmed_comp_date3'] > "0")
{
    $request_confirmed_completion_date3 = date("d/m/Y", $database_data['request_confirmed_comp_date3']);
}
else
{
    $request_confirmed_completion_date3 = " -";
}

if ($database_data['request_confirmed_comp_date4'] > "0")
{
    $request_confirmed_completion_date4 = date("d/m/Y", $database_data['request_confirmed_comp_date4']);
}
else
{
    $request_confirmed_completion_date4 = " -";
}

if ($database_data['request_confirmed_comp_date5'] > "0")
{
    $request_confirmed_completion_date5 = date("d/m/Y", $database_data['request_confirmed_comp_date5']);
}
else
{
    $request_confirmed_completion_date5 = " -";
}

if ($database_data['request_confirmed_comp_date6'] > "0")
{
    $request_confirmed_completion_date6 = date("d/m/Y", $database_data['request_confirmed_comp_date6']);
}
else
{
    $request_confirmed_completion_date6 = " -";
}

if ($database_data['request_date_required'] > "0")
{
    $request_date_required = date("d/m/Y", $database_data['request_date_required']);
}
else
{
    $request_date_required = "-";
}

if ($database_data['request_date'] > "0")
{
    $request_date = date("d/m/Y", $database_data['request_date']);
}
else
{
    $request_date = "-";
}

然后使用;

echo '<td><b>1.</b>'.$request_confirmed_completion_date.'<br /><b>2.</b>'.$request_confirmed_completion_date2.'<br /><b>3.</b>'.$request_confirmed_completion_date3.'<br /><b>4.</b>'.$request_confirmed_completion_date4.'<br /><b>5.</b>'.$request_confirmed_completion_date5.'<br /><b>6.</b>'.$request_confirmed_completion_date6.'</td>';

现在我可能没有太多的PHP知识,但我知道这是一个非常漫长的方式。无论如何,我可以从第一个代码块创建的数组中提取最新日期,然后将它们输出到表中。

感谢您提供任何帮助或建议,即使您可以指出我正确的方向,使用哪个循环会有所帮助。

编辑:我已经在线上传了整个文件here,希望这样可以解决一些困惑。

5 个答案:

答案 0 :(得分:0)

您想使用php函数asort。由于您的所有值都是数字,因此您应该能够进行标准排序并使用array_pop拉出最后一项。

它可能看起来像这样:

asort($database_data); 
$latest = array_pop($database_data); 
echo date('m/d/Y', $latest);

答案 1 :(得分:0)

使用变量名创建一个数组,如果变量是$ A,$ B和$ C,那么

$vars = array("A","B","C");
foreach($vars as $var_name){
    if($database_data[$var_name] > "0")
    $$var_name = $database_data[$var_name];
    else
    $$var_name = "-";
}

注意:A,B和C是虚拟变量名,因为代码中的变量名太长了: - )

答案 2 :(得分:0)

首先你的if条件有问题,你不能说$x > "0"因为使用双引号你使用0作为string。你应该使用整数$x > 0

现在我的回答:

我无法理解你的系统,所以我假设总会有6个日期。

for($q = 0;$q < 6; $q++)
{
if($database_data[...][$q] > 0)
 $dates[] = date("d/m/Y", $database_data['...'][$q]);
else
 $dates[] = " - ";
}

如您所见,您必须将数据库数据作为数组$database_data['...'][]获取。

答案 3 :(得分:0)

如果你可以调整原始的SQL语句,它可能看起来像这样:

select request_confirmed_comp_date, request_confirmed_comp_date2, request_confirmed_comp_date3, request_confirmed_comp_date4, request_confirmed_comp_date5, request_confirmed_comp_date6 
from sometablename 
where somefield='something'

您可以调整它以使用更短(和一致)的字段名称

select request_confirmed_comp_date as date1, request_confirmed_comp_date2 as date2, request_confirmed_comp_date3 as date3, request_confirmed_comp_date4 as date4, request_confirmed_comp_date5 as date5, request_confirmed_comp_date6 as date6 
from sometablename 
where somefield='something'

然后在PHP中使用数组迭代字段名称,如下所示:

<?php
$lastCompletionDate=""; //start by assuming there was no completion date
for($i=1;$i<=6;$i++) { //check to see if any field is after the last known completion date
  if ($database_data['date'.$i] && (date("d/m/Y", $database_data['date'.$i]) > $lastCompletionDate)) {
    //if so, store the new date
    $lastCompletionDate=date("d/m/Y", $database_data['date'.$i]);
  }
}
if($lastCompletionDate) {
  echo "The last completion date was $lastCompletionDate\n";
}else {
  echo "There was no completion date.\n";
}
?>

答案 4 :(得分:0)

另一种解决方案是使用SQL引擎自己的内部函数来查找最高日期,如下所示:

select greatest(request_confirmed_comp_date, 
                request_confirmed_comp_date2, 
                request_confirmed_comp_date3, 
                request_confirmed_comp_date4, 
                request_confirmed_comp_date5, 
                request_confirmed_comp_date6) as greatestcompdate
from sometablename etc...

然后在PHP中引用它,如

<?php
  if($database_data['greatestcompdate']) {
    echo "There was a greatest completion date and it was $database_data[greatestcompdate]";
  }
?>