Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zamiana wartości w pętli
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
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
)
peter13135
Bo podajesz jeden parametr, a powinieneś trzy podać tongue.gif
Rozbij ten string : "231,236,107" explodem, po przecinku i podaj 3 argumenty.
Kshyhoo
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
peter13135
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. }
Kshyhoo
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. }
peter13135
Za co Ty dostałeś te 118 pochwał ? 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.  
Kshyhoo
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 wink.gif
Dzięki za pomoc. Kombinowałem już wczoraj z explode, ale mi nie szło.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.