0

我自己的一个小背景是我对 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 知识,但我知道这是一个非常长的路要走。无论如何,我可以从由第一个代码块创建的数组中提取最新日期,然后将它们输出到表中。

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

编辑:我已经在这里在线上传了完整的文件,希望这会消除一些混乱。

4

5 回答 5

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]";
  }
?>
于 2013-06-17T14:05:56.163 回答
0

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

它可能看起来像这样:

asort($database_data); 
$latest = array_pop($database_data); 
echo date('m/d/Y', $latest);
于 2013-06-17T13:46:50.767 回答
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 是虚拟变量名称,因为代码中的变量名称太长 :-)

于 2013-06-17T13:47:53.800 回答
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";
}
?>
于 2013-06-17T14:04:05.437 回答
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['...'][]

于 2013-06-17T13:50:24.473 回答