0

以下のリンクを使用して、日付の配列を作成しました。

http://boonedocks.net/mike/archives/137-Creating-a-Date-Range-Array-with-PHP.html

ただし、日付(配列内)と日付(クエリ結果内)を比較して、その配列の日付を置き換えたいと思いました。

それらが等しい場合、配列内のその日付を mysql クエリの結果に置き換えます。

配列:

array(
      9/1/2013,
      9/2/2013,
      9/3/2013,
      9/4/2013,
      9/5/2013
 )

クエリ結果:

|   date    |  value0  |   value1  |   value2   |  and so on...
|  9/2/2013 |    5     |     A     |     AQ     |
|  9/3/2013 |    6     |     V     |     CD     |
|  9/5/2013 |    7     |     X     |     SA     |

結果は次のようになります。

PHP date    ---->     9/1/2013      0      
Database    ---->     9/2/2013      5
Database    ---->     9/3/2013      6
PHP date    ---->     9/4/2013      0
Database    ---->     9/5/2013      7

PHPでそれを行うにはどうすればよいですか?foreach 内で while ループを試してみましたが、うまくいきません。

テーブルに複数の列がある場合はどうなりますか? 以下の回答を試してみましたが、それは単なる二次元だと思いますか? 上記の mysql クエリの編集を参照してください。

編集:

私は今これをやった:

 <?php

    $getDays = array(
      9/1/2013,
      9/2/2013,
      9/3/2013,
      9/4/2013,
      9/5/2013
    );


$result = array();
while($row = mysql_fetch_assoc($getTime))
{
     $result[] = $row;
}

for($i=0; $i < count($getDays); $i++)
{

?>
<tr>
    <td><?php echo $result[$i]['date']; ?></td>
    <td><?php echo $result[$i]['value0']; ?></td>
    <td><?php echo $result[$i]['value1']; ?></td>
    <td><?php echo $result[$i]['value2']; ?></td>
</tr>

<?php

}
?>

しかし、問題は、一部の日付が正しい順序で出力されていないことです。

4

5 に答える 5

1

より簡単なオプションは、結果の配列のキーとして日付を作成することです。

次のように、両方の配列を一度に 1 つずつ処理できます。

$outputArray = array();

//assuming $inputArray is your date array
foreach ($inputArray as $date) {
    $outputArray[$date] = 0;
}

//assuming $res holds the output of mysql_query()
while($row = mysql_fetch_assoc($res)) {
    $outputArray[$row['date']] = $outputArray[$row['value']];
}
于 2013-09-18T04:04:23.517 に答える
0

$listすべての日付が という名前の配列に格納され、クエリ結果が であると仮定し$query_result、 foreach を使用してすべての日付を繰り返し、 を使用isset()して日付が にあるかどうかを判断します$query_result

<?php
$list = array(
    '9/1/2013',
    '9/2/2013',
    '9/3/2013',
    '9/4/2013',
    '9/5/2013',
);

$query_result = array(
    '9/2/2013' => 5,
    '9/3/2013' => 6,
    '9/5/2013' => 7,
);

foreach ($list as $date)
{
    if (isset($query_result[$date]))
    {
        echo "Database    ---->     $date      " . $query_result[$date] . "\n";
    }
    else
    {
        echo "PHP date    ---->     $date      0" . "\n";
    }
}
于 2013-09-18T03:58:59.523 に答える
0

たぶんこれを試してみてください...もしそれがかなり外れている場合は、私に知らせてください.私はあなたがそれを理解するのを手伝います. :)

<?php
 $phpdates = array(
               '9/1/2013',
               '9/2/2013',
               '9/3/2013',
               '9/4/2013',
               '9/5/2013'
            );

 while ($allsqlresults = mysql_fetch_array($yourOriginalQueryHere)) {
    $mysqldates[] = $allsqlresults['date'];
    $mysqlvalues[] = $allsqlresults['values'];
 }
 foreach ($phpdates as $key => $phpdate) {
   if (in_array($phpdate, $mysqldates) {
     $text = 'PHP date';
     $column3 = $mysqlvalues[$key];
   }
   else {
     $text = 'Database';
     $column3 = 0;
   }
   print $text . $phpdate . $column3;
 }
于 2013-09-18T04:00:41.420 に答える
0

次の例で考えてみましょう。

 // PHP Date Array
 $array1 = array('9/5/2013', '9/6/2013', '9/7/2013', '9/8/2013');

 // Database Array
 $array2 = array('9/5/2013'=>'5', '9/8/2013'=>'7');

 foreach( $array1 as $arr ){
   if( array_key_exists ($arr, $array2) !== false ){
      echo "Database date    ---->    " . $arr . "    " . $array2[$arr] . "\r\n";
   }
   else {
      echo "PHP date         ---->    " . $arr . "    0\r\n";
   }
 }



// OUTPUT
Database date    ---->    9/5/2013    5
PHP date         ---->    9/6/2013    0
PHP date         ---->    9/7/2013    0
Database date    ---->    9/8/2013    7

これはCodepad.orgのライブ デモです。

于 2013-09-18T04:09:31.700 に答える