检测数组中的空值并将其设置为''

时间:2012-02-21 03:19:48

标签: php arrays

我正在使用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' => ''
);

5 个答案:

答案 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'], "")
);
相关问题