Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zamiana wartości w pętli
Kshyhoo
post
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Coś ciężko mi się myśli. Chcę pobrać dane z pliku, poddać je konwersji i ponownie zapisać do pliku (ew. wyświetlić). Pojedyncza linia działa, ale jak kombinuję w pętli, to ma komunikat:
Cytat
Warning: Missing argument 2 for rgb2hex(), called in C:\AppServ\www\...\hexToRGB.php on line 29 and defined in C:\AppServ\www\...\hexToRGB.php on line 16

Funkcja:
  1. function rgb2hex($r, $g, $b){
  2. return sprintf("#%02X%02X%02X", $r, $g, $b);
  3. }

Ja wywołam tak:
  1. $hex = rgb2hex(231,236,107);

Działa, a jak polecę pętlą:
  1. $dane = file("plik.txt");
  2. for( $w = 0; $w < count($dane); $w++ ) {
  3. rgb2hex($dane[$w]);
  4. }

To wywala błąd, choć (moim zdaniem) dane są ok:
Cytat
Array
(
[0] => 231,236,107

[1] => 231,191,167

[2] => 233,161,130

[3] => 98,190,174

[4] => 194,169,185

[5] => 135,186,183

[6] => 153,164,200
)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
peter13135
post
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Bo podajesz jeden parametr, a powinieneś trzy podać (IMG:style_emoticons/default/tongue.gif)
Rozbij ten string : "231,236,107" explodem, po przecinku i podaj 3 argumenty.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Czegoś tu nie łapię:
  1. $dane = array();
  2. $dane = "124, 255, 11";
  3. $dane = explode(", ", $dane);
  4. rgb2hex($dane);

co daje:
Cytat
Array
(
[0] => 124
[1] => 255
[2] => 11
)

a wynik:
Cytat
Warning: Missing argument 2 for rgb2hex(), called in C:\AppServ\www\...\hexToRGB.php on line 32 and defined in C:\AppServ\www\...\hexToRGB.php on line 16

Warning: Missing argument 3 for rgb2hex(), called in C:\AppServ\www\...\hexToRGB.php on line 32 and defined in C:\AppServ\www\...\hexToRGB.php on line 16
Go to the top of the page
+Quote Post
peter13135
post
Post #4





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Znowu podajesz jeden argument :/

Jak wywołujesz tak:
  1. $hex = rgb2hex(231,236,107);

to dajesz 3 argumenty.
Jak wywołujez tak :
  1. $dane = array();
  2. $dane = "124, 255, 11";
  3. $dane = explode(", ", $dane);
  4. rgb2hex($dane);

To dajesz tylko 1 argument, bo powyższy kod jest równoważny z takim :
  1. rgb2hex(array('124', '255', '11'));

Czyli podajesz w pierwszym argumencie tablicę 3 elementową.
A funkcja przyjmuje 3 parametry.
Jakbyś zrobił tak (na początku tak kombinowałeś):
  1. rgb2hex("124, 255, 11");

to znowu masz jeden parametr.
"124, 255, 11" - to jest jedna "zmienna" (raczej stała.. no ale mniejsza z tym). A nie 3 wartości, oddzielone przecinkami.

Musisz zrobić tak :

  1. $dane = array();
  2. $dane = "124, 255, 11";
  3. $dane = explode(", ", $dane);
  4. rgb2hex($dane[0],$dane[1],$dane[2]);


Lub przerobić funkcję, tak żeby przyjmowała jeden parametr jako tablicę 3 elementową :

  1. function rgb2hex($rgb){
  2.  
  3. return sprintf("#%02X%02X%02X", $rgb[0],$rgb[1],$rgb[2],);
  4.  
  5. }


Ten post edytował peter13135 10.03.2012, 13:31:19
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Czyli powinienem zrobić tak:
  1. function rgb2hex($rgb) {
  2. return sprintf("#%02X%02X%02X", $rgb[0],$rgb[1],$rgb[2]);
  3. }
  4.  
  5. $dane = file("plik.txt");
  6.  
  7. for( $w = 0; $w < count($dane); $w++ ) {
  8. rgb2hex($dane[$w]);
  9. echo $dane[$w].'<br />';;
  10. }
Go to the top of the page
+Quote Post
peter13135
post
Post #6





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Za co Ty dostałeś te 118 pochwał ? (IMG:style_emoticons/default/biggrin.gif)
Nie tak.

Ta funkcja zgodnie z tym co pisałem, przyjmuje jako parametr 3 elementową tablicę. Ty podajesz string.

Więc robisz albo tak :
  1. function rgb2hex($rgb) {
  2.  
  3. return sprintf("#%02X%02X%02X", $rgb[0],$rgb[1],$rgb[2]);
  4.  
  5. }
  6.  
  7.  
  8.  
  9. $dane = file("plik.txt");
  10.  
  11.  
  12.  
  13. for( $w = 0; $w < count($dane); $w++ ) {
  14.  
  15. rgb2hex(explode(', ', $dane[$w]));
  16.  
  17. }


albo tak :

  1. function rgb2hex($rgb) {
  2.  
  3. $rgb = explode(', ', $rgb);
  4. return sprintf("#%02X%02X%02X", $rgb[0], $rgb[1], $rgb[2]);
  5.  
  6. }
  7.  
  8.  
  9.  
  10. $dane = file("plik.txt");
  11.  
  12.  
  13.  
  14. for( $w = 0; $w < count($dane); $w++ ) {
  15.  
  16. rgb2hex($dane[$w]);
  17.  
  18. }
  19.  


Ten post edytował peter13135 10.03.2012, 13:47:58
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Jestem amatorem i nigdy nie robiłem nic na plikach. Po za tym, mam zapalenie ścięgna i żre prochy- nie myślę logicznie. A za co "+"? Zobacz sam (IMG:style_emoticons/default/wink.gif)
Dzięki za pomoc. Kombinowałem już wczoraj z explode, ale mi nie szło.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 03:07