假设这样做是适当的,您可以将代码更改为:
<dt>EXIF data:</dt>
<dd><ul>
<?php foreach ($exif as $key => $value):
if (($key != "Width") && ($key != "Height") && ($key !="DateTime")): ?><li><strong><?php
if ($key == "model") {
echo "Camera";
} elseif ($key == "ExposureTime") {
echo "Exposure";
//$newvalue = explode("(", $value);
//$newvalue = substr($newvalue[2], 0, -1)."s";
$newvalue = $value . "s"; // see note 1
} elseif ($key == "FNumber") {
echo "Aperture";
$fraction_parts = explode("/", $value);
$newvalue = $fraction_parts[0] / $fraction_parts[1] // see note 2
} else {
echo $key;
} ?></strong>: <?php if (!$newvalue) { echo $value; } else { echo $newvalue; $newvalue = \'\'; } ?></li>
<?php endif;
endforeach; ?>
</ul></dd></dl>
我没有测试它,所以请让我知道如果它不工作,我会修复它。
Note 1它只输出快门速度的“s”,因为expode试图根据(
但没有(
在字符串中。所以,当substr()
函数正在查看newvalue[2]
什么都没有得到。此外,您可能从PHP收到一条警告,指出数组键不存在(您可以在PHP日志中检查它)。
由于您提供的转储中的数据看起来已经很好了,所以我只是在其后面加了“s”。
Note 2为了得到分数的十进制值,我将其分解为“/”,它构成了一个数组,分子作为第一个值,分母作为第二个值。然后,自$newvalue
设置为打印(而不是$value
) 如果存在,我设置$newvalue
分子除以分母的结果。
我希望这有帮助。
干杯
Edit 1要使其显示为“sec”而不是“s”,只需更改代码显示的位置. "s"
要说. "sec"
. 然后,要让它在焦距前显示“f/”,您可以添加"f/" .
之前fraction_parts[0]
. 请注意期间(.
) 用于连接字符串。
Edit 2关于下面评论中发布的其他请求,这是您如何编辑来自$exif
阵列:
<dt>EXIF data:</dt>
<dd><ul>
<?php foreach ($exif as $key => $value):
if (($key != "Width") && ($key != "Height") && ($key !="DateTime")): ?><li><strong><?php
if ($key == "model") {
echo "Camera";
} elseif ($key == "ExposureTime") {
echo "Exposure";
//$newvalue = explode("(", $value);
//$newvalue = substr($newvalue[2], 0, -1)."s";
$newvalue = $value . "s"; // see note 1
} elseif ($key == "FNumber") {
echo "Aperture";
$fraction_parts = explode("/", $value);
$newvalue = $fraction_parts[0] / $fraction_parts[1] // see note 2
} elseif ($key == "ExposureProgram") { // see note 3
echo "Exposure Program";
$value_definitions = array(
\'2\' => "Auto",
\'3\' => "Aperture Priority",
\'4\' => "Shutter Priority"
);
if( array_key_exists( $value, $value_definitions ) ) {
$newvalue = $value_definitions[$value];
}
} else {
echo $key;
} ?></strong>: <?php if (!$newvalue) { echo $value; } else { echo $newvalue; $newvalue = \'\'; } ?></li>
<?php endif;
endforeach; ?>
</ul></dd></dl>
Note 3这是一个与其他条件一样有效的条件。它设置
$newvalue
用于替换
$value
变量然而,这只会设置
$newvalue
如果
$value
是
$value_definitions
大堆如果
$value
匹配
$value_definitions
大堆
$newvalue
将设置为分配给匹配键的值。