0

私自身の小さな背景は、私がphpにかなり慣れていないということです。私は IT アシスタントとして働いており、デザイナーがサンプルに使用するページの 1 つを編集するように依頼されました。内部でホストされているページであるため、このページを参照することはできません。

正直なところ、質問が正しく行われているかどうかさえわかりませんが、ご容赦ください。

ページには、リスト内の 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

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

まず、 if 条件に問題があります。$x > "0"二重引用符を使用すると、 0 を として使用しているため、言うことはできませんstring。integer を使用する必要があります$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 に答える
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

元の 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 に答える