2012-02-21 3 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'] 
); 

すべての画像は焦点距離、露光時間とFNUMBERを有していてもよく、それは未定義のインデックスエラーが表示されるわけではありません。

は、それの代わりに空のインデックスの、ちょうど置く「」を検出することが可能ですので、(その画像のための露光時間とFNUMBERがなかった場合)には、次のようになりたい:

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

のhttp://mywiki.wooledge .org/XyProblem –

答えて

3

だけとキーがまだ存在しない場合にのみ場合は、配列に値を追加するために、配列union演算子+を使用します。

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

あなたはまた、「値なし」のnullではなく、空の文字列を使用する必要があります値。

+1

優雅な解決策、私はそれが好きです。私はおそらく 'array_fill_keys()'を使用してデフォルト(ただし、同じ値がすべてOKです)とします。 –

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'], "") 
); 
関連する問題