[php] Verwerken array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gaafy
  • Registratie: Juli 2001
  • Laatst online: 03-06-2024
Ik ben geen php-held, en heb ik nu een probleem waar ik niet uit kom. Voor mijn eigen site haal ik door middel van een api informatie van Flickr. Nu ben ik bezig om wat informatie uit de exif van mijn foto's te tonen, en dat krijg ik volgens de onderstaande manier aangeleverd.

Nu had ik daarvoor deze code gemaakt:

code:
1
2
3
4
print("Camera: ".$exif[exif][1][raw]."<br>");
print("Focal lenght: ".$exif[exif][18][clean]."<br>");
print("Exposure: ".$exif[exif][8][clean]."<br>");
print("Aperture: ".$exif[exif][9][clean]."<br>");


Maar het blijkt nu dat de nummers verschillen. Ik zou dus op de een of andere manier eerst moeten definieren welke elementen uit de exif ik wil laten zien en of ik daarvan de 'raw' of 'clean' versie wil tonen. En vervolgens de aangeleverde raw nalopen. Op welke manier (met welke functies) zou ik zoiets kunnen opzetten?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
Array
(
    [exif] => Array
        (
            [0] => Array
                (
                    [_name] => exif
                    [_attributes] => Array
                        (
                            [tagspace] => TIFF
                            [tagspaceid] => 1
                            [tag] => 271
                            [label] => Manufacturer
                        )

                    [_value] => 
                    [tagspace] => TIFF
                    [tagspaceid] => 1
                    [tag] => 271
                    [label] => Manufacturer
                    [raw] => Canon
                )

            [1] => Array
                (
                    [_name] => exif
                    [_attributes] => Array
                        (
                            [tagspace] => TIFF
                            [tagspaceid] => 1
                            [tag] => 272
                            [label] => Model
                        )

                    [_value] => 
                    [tagspace] => TIFF
                    [tagspaceid] => 1
                    [tag] => 272
                    [label] => Model
                    [raw] => Canon EOS DIGITAL REBEL
                )

            [2] => Array
                (
                    [_name] => exif
                    [_attributes] => Array
                        (
                            [tagspace] => TIFF
                            [tagspaceid] => 1
                            [tag] => 274
                            [label] => Orientation
                        )

                    [_value] => 
                    [tagspace] => TIFF
                    [tagspaceid] => 1
                    [tag] => 274
                    [label] => Orientation
                    [raw] => 1
                    [clean] => Normal
                )

               <knipje>
           
            [8] => Array
                (
                    [_name] => exif
                    [_attributes] => Array
                        (
                            [tagspace] => TIFF
                            [tagspaceid] => 1
                            [tag] => 531
                            [label] => YCbCr Positioning
                        )

                    [_value] => 
                    [tagspace] => TIFF
                    [tagspaceid] => 1
                    [tag] => 531
                    [label] => YCbCr Positioning
                    [raw] => 1
                    [clean] => Centered
                )

            [9] => Array
                (
                    [_name] => exif
                    [_attributes] => Array
                        (
                            [tagspace] => EXIF
                            [tagspaceid] => 0
                            [tag] => 33434
                            [label] => Exposure
                        )

                    [_value] => 
                    [tagspace] => EXIF
                    [tagspaceid] => 0
                    [tag] => 33434
                    [label] => Exposure
                    [raw] => 1/60
                    [clean] => 0.017 sec (1/60)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Met foreach door alle velden van $exif['exif'] heen lopen, en dan kijken of die het veld bevat wat je hebben moet? Kijk anders even op PHP.net hoe foreach werkt en hoe je het kan toepassen op jouw probleem. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Denk er ook even aan dat je een key van een array, mits geen getal, ook echt als string doorgeeft. Nu krijg je namelijk dat php eerst naar de constante exif gaat zoeken, die niet kan vinden, en als backup er maar een string van maakt. Als je error_reporting(E_ALL); hebt gezet echter krijg je nog steeds een warning. Geen $exif[exif] dus, maar op de manier die -NMe- geeft. Als je ook echt een constante met die waarde hebt gezet, dan zou ik hem toch een andere naam geven. Meer iets als EXIF_ROOT_KEY oid.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Gaafy
  • Registratie: Juli 2001
  • Laatst online: 03-06-2024
Bedankt voor jullie hulp, maar ik kom er toch niet helemaal uit. Ik heb nu dit gemaakt:

code:
1
2
3
foreach ($exif['exif'] as $exifinfo) {
        print("$exifinfo[label]: $exifinfo[raw]:<br>");
}


Hiermee krijg ik prima de gegevens van de exif op het scherm. Nu wil ik ze nog filteren. Ik zal dus een lijst met labels moeten maken en niet alle labels tonen, maar alleen die op de lijst voorkomen. Welke functie kan ik hiervoor gebruiken?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

welke code heb je nu?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Daar kun je in_array voor gebruiken:
PHP:
1
2
3
4
5
$allowedLabels = array('blaat', 'melp');
foreach ( $exif['exif'] as $exifinfo ) {
  if ( !in_array($exifinfo['label'], $allowedLabels) ) continue;
  print("$exifinfo[label]: $exifinfo[raw]:<br>");
}

Noushka's Magnificent Dream | Unity

Pagina: 1