Assuming it is appropriate to do so, you can change your code to this:
<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("https://wordpress.stackexchange.com/", $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>
I didn’t test it, so please let me know if it doesn’t work and i’ll fix it.
Note 1
it was only outputting the “s” for the shutter speed because the expode was trying to break the string apart based on (
but there was not a (
in the string. So, when the substr()
function was looking at newvalue[2]
it wasn’t getting anything. Also, you were probably getting a warning from PHP that an array key did not exist (you can check it in your PHP logs).
Since your data from the dump you provided looks like fine output already, I just appended “s” to it.
Note 2
To get the decimal value of the fraction I exploded it by “https://wordpress.stackexchange.com/” which made an array with the numerator as the first value and the denominator as the second value. Then, since $newvalue
is set to print (instead of $value
) if it exists, I set $newvalue
to the result of dividing the numerator by the denominator.
I hope this helps.
Cheers!
Edit 1
To get it to show as “sec” instead of “s”, just change where the code says . "s"
to say . "sec"
. Then, to get it to show “f/” in front of the focal number you can add "f/" .
before fraction_parts[0]
. Note how the period (.
) is used to join strings.
Edit 2
About the additional request posted in the comment below, this is how you can edit other outputs from your $exif
array:
<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("https://wordpress.stackexchange.com/", $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
This is a conditional that works just like the other ones. It sets the $newvalue
variable which is used to replace the $value
variable. However, this one will only set the $newvalue
if the $value
is one of the keys in the $value_definitions
array. If $value
matches a key in the $value_definitions
array, $newvalue
will be set to the value assigned to the matching key.