我自己的一个小背景是我对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,希望这样可以解决一些困惑。
答案 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]";
}
?>