【问题标题】:PHP compare current array value to previous valuePHP将当前数组值与前一个值进行比较
【发布时间】:2013-03-14 19:23:57
【问题描述】:

我有一个array,其中包含图片和每个图片的日期。我正在通过数组explode 检索日期。我想获取此日期值并将其与上一张图像的上一个日期值进行比较。我的目标是将这些日期显示为对应于每个不同日期的图像集的标题。

这是我一直在摆弄的代码,试图让它工作(对不起,我所有的斜线):

$p = 0;
$a = -1;
echo "<table>";
echo "<tr>";
foreach (array_combine($images,$locs) as $image => $loc)
{
    $p++;
    $a++;
    $datesort = explode('>',$image);
    echo "<style>";
    echo "input[label=t" . $p . "]    {";
    echo "display: none;";
    echo "}";
    echo "input[label=t" . $p . "] + label   {";
    echo "border: 5px solid #FFFFFF;";
    $image = "background: url('http://blah.com/" . $loctb[$p] . "');";
    echo $image;
    echo "height: 61px;";
    echo "width: 92px;";
    echo "display: inline-block;";
    echo "padding: 0 0 0 0px;";
    echo "}";
    echo "input[label=t" . $p . "]:checked + label   {";
    echo "border: 5px solid #FF9900;";
    echo "background: url('http://blah.com/" . $loctb[$p] . "');";
    echo "height: 61px;";
    echo "width: 92px;";
    echo "display: inline-block;";
    echo "padding: 0 0 0 0px;";
    echo "}";
    echo "</style>";
    $lastdate = array("");
    $lastdate[$a] = $datesort[1];
    echo "<td>";
    if ($lastdate[$a] <> $datesort[1]){
    echo "<h2>";
    echo $datesort[1];
    echo "</h2>";
    }
    echo "<input type=\"checkbox\" label=\"t" . $p . "\" id=\"t" . $p . "\" name =\"boxes[]\" value=\"<img src=http://blah.com/" . $loc . "\" />";
    echo "<label for=\"t" . $p . "\"></label>";
    echo "</div>";
    echo "</td>";
    if ($p % 2 == 0)
    {
    echo "</tr>";
    }
}
echo "</table>";

我一直在尝试将当前日期值存储到另一个 array 变量中,然后下次通过我的 foreach 循环将其与新值进行比较,但我做错了:-/.. .

如果您能提供任何帮助,我将不胜感激。谢谢

【问题讨论】:

  • 所以基本上,您是按日期对图像进行分组?
  • 您可能想看看 heredoc 语法。这将为您提供更清晰的代码。 php.net/manual/en/…

标签: php arrays comparison


【解决方案1】:

这是一种快速而肮脏的方法,尽管您可能希望根据自己的需要对其进行调整(我遇到过这个问题,但更糟糕的是,因为我还填写了两者之间的空白日期):

$previous_dates = array();

foreach (array_combine($images,$locs) as $image => $loc) {

    $datesort = explode('>',$image);

    if (end($previous_dates) <> $datesort[1]) {
       echo "<h2>";
       echo $datesort[1];
       echo "</h2>";
    }
      // ... more stuff ...//

    $previous_dates[] =  $datesort[1];
}

真的,我会重新考虑您为循环内的爆炸所采取的方法,但首先,看看这是否能让您到达您需要的地方。

【讨论】:

  • 太棒了!您新编辑的代码成功了。感谢帮助。谢谢,安东尼。
  • 是的,很抱歉。这是我从内存中编写代码所得到的。我认为您遇到的最大困境是简单地将$lastdate = array(""); 设置在循环内,而不是提前设置。为了避免非循环区域中的循环变量,我已经做了一百万次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
相关资源
最近更新 更多