Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] zmiana ciągu znaków w tablice
Regss
post 13.05.2006, 14:55:33
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Witam! Potrzebuje małej pomocy.
Przykładowo mam taki oto ciąg znaków:
Kod
File Size : 79 kB : Make : Canon : Camera Model Name : Canon PowerShot A510 : Create Date : 2005:07:20 05:05:27 : Exposure Time : 1/125 : F Number : 8.0 : Flash : On, Red-eye reduction : Exposure Compensation : 0 : Focal Length : 23.2mm : White Balance : Auto : Image Size : 640x480


i chciał bym przekształcić go na tablice wyglądającą następująco:

Kod
[File Size] => 79 kB
[Make] => Canon
[Camera Model Name] => Canon PowerShot A510
[Create Date] => 2005:07:20 05:05:27
itd...


Domyślam się, że trzeba urzyć funkcji explode() tylko nie wiem dokładnie jak. Proszę o pomoc. Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Kuziu
post 13.05.2006, 15:15:42
Post #2





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

Ostrzeżenie: (0%)
-----


  1. <?
  2. $tekst = 'File Size : 79 kB : Make : Canon : Camera Model Name : Canon PowerShot A510 : Cr
    eate Date : 2005:07:20 05:05:27 : Exposure Time : 1/125 : F Number : 8.0 : Flash : On, Red-eye reduction : Exposure Compensation : 0 : Focal Length : 23.2mm : White Balanc
    e : Auto : Image Size : 640x480'
    ;
  3. $tmp = split(" : ", $tekst);
  4.  
  5. for($i=0; $i<count($tmp); $i+=2){
  6. $wynikowaTablica[$tmp[$i]] = $tmp[($i+1)];
  7. }
  8.  
  9. var_dump($wynikowaTablica);
  10. ?>


Jeśli tam miedzy dwukropkami nie ma spacji to je wywal, ale chyba muszą być ze względu na zapis czasu z dwukropkami

Ten post edytował Kuziu 13.05.2006, 15:21:11


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
Regss
post 13.05.2006, 15:49:50
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Tak jest spacja po prawej i lewej stronei każdego dwukropka, tylko nie wiem czemu po zastosowaniu Twojego skryptu uzyskuje:
Kod
Array ( [File Size ] => 79 kB [Make ] => Canon [Camera Model Name ] => Canon PowerShot A510 [Create Date ] => 2005:07:20 05:05:27 [Exposure Time ] => 1/125 [F Number ] => 8.0 [Flash ] => On, Red-eye reduction [Exposure Compensation ] => 0 [Focal Length ] => 23.2mm [White Balance ] => Auto [Image Size ] => 640x480 ) 1

Nie wiem czemu są spacje w każdym kwadratowym nawiasie powinny być usuwane?

tak wygląda mój cały skrypt:

  1. <?php
  2. $exif_filename = "test2.jpg";
  3. $exif_image_path = "$exif_filename";
  4. $perl_path = "/usr/bin/perl";
  5. $exiftool_path = "cgi-bin/exiftool";
  6. exec("$perl_path $exiftool_path -filesize -make -model -createdate -exposuretime -fnumber -iso -flash -exposurecompensation -focallength -quality -whitebalance -imagesize $exif_image_path", $exif_table);
  7. $exif_table_re = implode($exif_table, " : ");
  8. $tmp = split(" : ", $exif_table_re);
  9. for($i=0; $i<count($tmp); $i+=2){
  10. $exif[$tmp[$i]] = $tmp[($i+1)];
  11. }
  12. echo print_r($exif);
  13. ?>


Ten post edytował Regss 13.05.2006, 15:51:35
Go to the top of the page
+Quote Post
Kuziu
post 13.05.2006, 16:12:50
Post #4





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Kod
array(11) { ["File Size"]=>  string(5) "79 kB" ["Make"]=>  string(5) "Canon" ["Camera Model Name"]=>  string(20) "Canon PowerShot A510" ["Create Date"]=>  string(19) "2005:07:20 05:05:27" ["Exposure Time"]=>  string(5) "1/125" ["F Number"]=>  string(3) "8.0" ["Flash"]=>  string(21) "On, Red-eye reduction" ["Exposure Compensation"]=>  string(1) "0" ["Focal Length"]=>  string(6) "23.2mm" ["White Balance"]=>  string(4) "Auto" ["Image Size"]=>  string(7) "640x480" }


U mnie wynik jest taki uzywam php 5 moze w 4 trzeba zamienić do string'a klucz tablicy


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
Regss
post 13.05.2006, 16:25:16
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Hmm dziwna sprawa ja sie nie znam na php ale uruchamiając sam Twój skrypt jest wszystko wporządku.

Może od początku:

po wykonaniu procedury exec
  1. <?php
  2. exec("$perl_path $exiftool_path -filesize -make -model -createdate -exposuretime -fnumber -iso -flash -exposurecompensation -focallength -quality -whitebalance -imagesize $exif_image_path", $exif_table);
  3. ?>

Uzyskuje tablice:
Kod
Array ( [0] => File Size : 79 kB [1] => Make : Canon [2] => Camera Model Name : Canon PowerShot A510 [3] => Create Date : 2005:07:20 05:05:27 [4] => Exposure Time : 1/125 [5] => F Number : 8.0 [6] => Flash : On, Red-eye reduction [7] => Exposure Compensation : 0 [8] => Focal Length : 23.2mm [9] => White Balance : Auto [10] => Image Size : 640x480 ) 1

Ale że potrzebuje ją w innym formacie [File Size] => 79 kB wykonałem zamiane tablicy na ciąg znaków za pomocą:
  1. <?php
  2. $exif_table_re = implode($exif_table, " : ");
  3. ?>

i uzyskałem:
Kod
File Size : 79 kB : Make : Canon : Camera Model Name : Canon PowerShot A510 : Create Date : 2005:07:20 05:05:27 : Exposure Time : 1/125 : F Number : 8.0 : Flash : On, Red-eye reduction : Exposure Compensation : 0 : Focal Length : 23.2mm : White Balance : Auto : Image Size : 640x4801

I następnie wykonując Twój skrypt wychodzi ze spacjami wiesz może gdzie leży błąd, bo ja jestem zielony z php ;]

Ten post edytował Regss 13.05.2006, 16:26:43
Go to the top of the page
+Quote Post
mike
post 13.05.2006, 17:02:45
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Spacje nie byłyby dla Was problemem jakbyście zajrzeli do manuala tongue.gif
Użycie trim() niweluje problem.
Go to the top of the page
+Quote Post
Regss
post 13.05.2006, 18:09:53
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Ehh spróbowałem tej funkcji trim() ale nic nie pomogło, chyba że źle ją zastosowałem tongue.gif

oto cały kod:
  1. <?
  2. $exif_filename = "test2.jpg";
  3. $exif_image_path = "$exif_filename";
  4. $perl_path = "/usr/bin/perl";
  5. $exiftool_path = "cgi-bin/exiftool";
  6. exec("$perl_path $exiftool_path -filesize -make -model -createdate -exposuretime -fnumber -iso -flash -exposurecompensation -focallength -quality -whitebalance -imagesize $exif_image_path", $exif_table);
  7. $exif_table_re = implode($exif_table, " : ");
  8. $tmp = split(":", $exif_replace_re);
  9. for($i=0; $i<count($tmp); $i+=2){
  10. $exif[$tmp[$i]] = $tmp[($i+1)];
  11. }
  12. echo "Tablica pobrana z programu \"\$exif_table\"";
  13. echo "</br></br>";
  14. var_dump($exif_table);
  15. echo "</br></br>";
  16. echo "Ciąg znaków po wykonaniu funkcji implode odzielanie \" : \"";
  17. echo "</br></br>";
  18. echo $exif_table_re;
  19. echo "</br></br>";
  20. echo "Tablica po wykonaniu funkcji split łączone \" : \"";
  21. echo "</br></br>";
  22. echo "Funkcja trim nie daje rezultatów:";
  23. echo "</br></br>";
  24. echo trim($exif_table_re);
  25. echo "</br></br>";
  26. ?>


A oto rezultaty: http://regss.no-ip.org/~ble/index4.php sprawdźcie na podglądzie źródła strony ile tam jest tych spacji ;]
Go to the top of the page
+Quote Post
siemakuba
post 13.05.2006, 18:40:53
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


użyj trim przy tworzeniu tablicy a nie wyświetlaniu.

  1. <?php
  2. for($i=0; $i<count($tmp); $i+=2){
  3. $exif[trim($tmp[$i])] = $tmp[($i+1)];
  4. }
  5. ?>


poza tym, jezeli na twoim serwerze sa dostepne, uzyj PHPowych funkcji Exif, bo widze ze wlasnie takie dane pobierasz za pomoca skryptu perla.

pozdr.
Go to the top of the page
+Quote Post
Regss
post 13.05.2006, 19:39:26
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Cytat(siemakuba @ 2006-05-13 17:40:53)
użyj trim przy tworzeniu tablicy a nie wyświetlaniu.

Po zmianie na Twój kod otrzymałem: array(1) { [""]=> NULL }

A co do EXIF pobieranego za pomocą exif_read_data to nie jestem przekonany ponieważ nie jest on dopracowany wole użyć biblioteki napisanej w PERL'u

Ten post edytował Regss 13.05.2006, 19:40:22
Go to the top of the page
+Quote Post
siemakuba
post 13.05.2006, 20:05:39
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


Cytat
Po zmianie na Twój kod otrzymałem: array(1) { [""]=> NULL }

mozesz pokazac ten kod? bo ja po var_dump($exif) otrzymalem:
Kod
array
  'File Size' => ' 79 kB ' (length=7)
  'Make' => ' Canon ' (length=7)
  'Camera Model Name' => ' Canon PowerShot A510 ' (length=22)
  'Create Date' => ' 2005' (length=5)
  '07' => '20 05' (length=5)
  '05' => '27 ' (length=3)
  'Exposure Time' => ' 1/125 ' (length=7)
  'F Number' => ' 8.0 ' (length=5)
  'Flash' => ' On, Red-eye reduction ' (length=23)
  'Exposure Compensation' => ' 0 ' (length=3)
  'Focal Length' => ' 23.2mm ' (length=8)
  'White Balance' => ' Auto ' (length=6)
  'Image Size' => ' 640x4801' (length=9)


pozdr.

edit: z mojego dumpa widać, że przyda się też trim() na wartościach tworzonej tablicy, a nie tylko na kluczach.

Ten post edytował siemakuba 13.05.2006, 20:06:40
Go to the top of the page
+Quote Post
Regss
post 13.05.2006, 20:24:54
Post #11





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


  1. <?
  2. $exif_filename = "test2.jpg";
  3. $exif_image_path = "$exif_filename";
  4. $perl_path = "/usr/bin/perl";
  5. $exiftool_path = "cgi-bin/exiftool";
  6. exec("$perl_path $exiftool_path -filesize -make -model -createdate -exposuretime -fnumber -iso -flash -exposurecompensation -focallength -quality -whitebalance -imagesize $exif_image_path", $exif_table);
  7. $exif_table_re = implode($exif_table, " : ");
  8. $tmp = split(":", $exif_replace_re);
  9. for($i=0; $i<count($tmp); $i+=2){
  10. $exif[trim($tmp[$i])] = $tmp[($i+1)];
  11. }
  12. var_dump($exif);
  13. ?>


Nie wiem jaki tu jest błąd.
Go to the top of the page
+Quote Post
siemakuba
post 13.05.2006, 20:42:24
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


błąd pochodzi stąd:
- po wykonaniu skryptu perla wynik otzymujesz w postaci tablicy do zmiennej $exif_table
- tworzysz zmienna $exif_table_re łącząc tablicę $exif_table za pomocą implode($exif_table, " : ");
- dlaczego zatem tu jest $exif_replace_re ? juz w tym momencie masz blad, i ja dostalem go na ekran. Masz wylaczone error_reporting / display_errors?
  1. <?php
  2. $tmp = split(":", $exif_replace_re);
  3. ?>


podsumowując:
  1. <?
  2. $exif_filename = "test2.jpg";
  3. $exif_image_path = "$exif_filename";
  4. $perl_path = "/usr/bin/perl";
  5. $exiftool_path = "cgi-bin/exiftool";
  6.  exec("$perl_path $exiftool_path -filesize -make -model -createdate -exposuretime -fnumber -iso -flash -exposurecompensation -focallength -quality -whitebalance -imagesize $exif_image_path", $exif_table);
  7.  
  8. $exif_table_re = implode($exif_table, " : ");
  9. $tmp = split(" : ", $exif_table_re);
  10. for($i=0; $i<count($tmp); $i+=2)
  11. {
  12. $exif[trim($tmp[$i])] = trim($tmp[($i+1)]);
  13. }
  14.  
  15. var_dump($exif);
  16. ?>


zwróć uwagę na linię 9
- string który chcesz podzelić to $exif_table_re a nie $exif_replace_re.
- jako separatora użyj " : " zamiast ":"

dodałem też trim na wartość tablicy w pętli for.

P.S. taki błąd powinieneś wychwycić sam. to prawie że literówka...

pozdr.
Go to the top of the page
+Quote Post
Regss
post 13.05.2006, 20:47:57
Post #13





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


O faktycznie przepraszam mała pomyłka kombinowałem z funkcją str_replace i widocznie niechcący nie zmieniłem spowrotem małe przeoczenie. Jak mówiłem raczkuje w dziedzinie php, ale dzięki wam się już troche nauczyłem cool.gif Pozdro.

Ten post edytował Regss 13.05.2006, 20:50:48
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:17