2012-02-21 56 views
1

我正在使用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,exposuretime和fnumber,所以它會顯示未定義的索引錯誤。

是否有可能檢測到空指數的,只是代替它把「」,所以它會看起來像這樣(如果沒有該圖像exposuretime和fnumber):

$file_info = array(
'FocalLength' => $exif['FocalLength'], 
'ExposureTime' => '', 
'FNumber' => '' 
); 
+0

HTTP://mywiki.wooledge .org/XyProblem – 2012-02-21 03:20:59

回答

3

只需使用陣列工會運營商+將值添加到一個數組當且僅當密鑰尚不存在:

$exif = exif_read_data('path/to/file'); 
$exif += array(
    'FocalLength' => null, 
    'ExposureTime' => null, 
    'FNumber'  => null 
); 

您還應該使用null而不是「沒有價值」空字符串值。

+1

優雅的解決方案,我喜歡它。我可能會使用'array_fill_keys()'作爲默認值(假設所有的值都是相同的)。 – 2012-02-21 04:25:41

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')); 
1

使用isset()檢查數組索引爲空。

1

嘗試

$file_info = array(
'FocalLength' => isset($exif['FocalLength']) ? $exif['FocalLength'] : '', 
'ExposureTime' => isset($exif['ExposureTime']) ? $exif['ExposureTime'] : '', 
'FNumber' => isset($exif['FNumber']) ? $exif['FNumber'] : '' 
); 
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'], "") 
); 
相關問題