我正在使用exif_read_data来存储数组中图像的数据。
它从目录中读取jpeg文件,而不是每个图像文件都具有相同的exif数据,有些文件可能有ExposureTime,有些文件可能没有。
$exif = array();
$exif = exif_read_data('path/to/file');
$file_info = array(
'FocalLength' => $exif['FocalLength'],
'ExposureTime' => $exif['ExposureTime'],
'FNumber' => $exif['FNumber']
);
并非每张图片都有focallength,曝光时间和fnumber,因此它会显示未定义的索引错误。
是否有可能检测到空索引并且只是将''代替它,所以它看起来像这样(如果该图像没有曝光时间和fnumber):
$file_info = array(
'FocalLength' => $exif['FocalLength'],
'ExposureTime' => '',
'FNumber' => ''
);
答案 0 :(得分:3)
当且仅当密钥不存在时,只需使用数组联合运算符+
向数组添加值:
$exif = exif_read_data('path/to/file');
$exif += array(
'FocalLength' => null,
'ExposureTime' => null,
'FNumber' => null
);
你也应该使用null
而不是空字符串来表示“无价值”。
答案 1 :(得分:2)
使用array_key_exists(在这种情况下,isset也可以使用)。
$file_info = array(
'FocalLength' => array_key_exists('FocalLength', $exif) ? $exif['FocalLength'] : '',
'ExposureTime' => array_key_exists('ExposureTime', $exif) ? $exif['ExposureTime'] : '',
'FNumber' => array_key_exists('FNumber', $exif) ? $exif['FNumber'] : ''
);
为了最大限度地减少代码重复,您可以使用array_map执行类似的操作:
$file_info = array_map(function($key) {
global $exif;
return array_key_exists($key, $exif) ? $exif[$key] : '';
}, Array('FocalLength', 'ExposureTime', 'FNumber'));
答案 2 :(得分:1)
使用isset()
检查数组索引是否为空。
答案 3 :(得分:1)
尝试
$file_info = array(
'FocalLength' => isset($exif['FocalLength']) ? $exif['FocalLength'] : '',
'ExposureTime' => isset($exif['ExposureTime']) ? $exif['ExposureTime'] : '',
'FNumber' => isset($exif['FNumber']) ? $exif['FNumber'] : ''
);
答案 4 :(得分:1)
创建简单的函数,例如:
function check_empty_value($value, $default){
if(!isset($value) or $value == "")
{
return $default;
}
return $value;
}
要使用它,您只需将其称为:
$file_info = array(
'FocalLength' => check_empty_value($exif['FocalLength'], ""),
'ExposureTime' => check_empty_value($exif['ExposureTime'], ""),
'FNumber' => check_empty_value($exif['FNumber'], "")
);