Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Podmiana pustych stringów na null, Przekazanie nazwy zmiennej
markonix
post 13.10.2012, 19:53:20
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


  1. function empty_to_null($array = array())
  2. {
  3. print_r($array);
  4. $new_array = array();
  5. foreach($array as $value)
  6. $new_array[TUTAJ NAZWA ZMIENNEJ] = $value == '' ? NULL : $value;
  7. return $new_array;
  8. }
  9.  
  10. extract(empty_to_null($zmienna1, $zmienna2));


Czy ktoś ma pomysł na działanie takowej funkcji.
Przydałaby mi się ona przed dodawaniem wielu pól numerycznych gdzie nie chce rzutowania na INT czyli zmieniania pustej wartości na 0.


--------------------
Go to the top of the page
+Quote Post
cudny
post 13.10.2012, 20:25:13
Post #2





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


Cytat(markonix @ 13.10.2012, 19:53:20 ) *
  1. function empty_to_null($array = array())
  2. {
  3. print_r($array);
  4. $new_array = array();
  5. foreach($array as $value)
  6. $new_array[TUTAJ NAZWA ZMIENNEJ] = $value == '' ? NULL : $value;
  7. return $new_array;
  8. }
  9.  
  10. extract(empty_to_null($zmienna1, $zmienna2));


Czy ktoś ma pomysł na działanie takowej funkcji.
Przydałaby mi się ona przed dodawaniem wielu pól numerycznych gdzie nie chce rzutowania na INT czyli zmieniania pustej wartości na 0.


W ogóle nie wiem o czym piszesz, bo funkcja jest gotowa, ja jednak bym to troszki uprościł:

  1. function empty_to_null($array = array()) {
  2. foreach($array as $ind => $value)
  3. if(!$value) $array[$ind] = NULL;
  4. return $array;
  5. }
  6.  
  7. extract(empty_to_null($zmienna1));



--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
markonix
post 13.10.2012, 21:49:54
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Uproszczenie zaburza funkcjonalność - ma zmieniać tylko wartości puste typu string na NULL, wartość zero jest już poprawna i nie chce jest NULLować.
Twoja funkcja nie zadziała gdy przekażemy argumenty w takiej postaci jak pokazałem (tylko wartościami), a trzeba przekazać tablicę asocjacyjną, a to już wydaje mi się zbyt czasochłonne i wolę już to obsługiwać wtedy bez funkcji.

Ten post edytował markonix 13.10.2012, 21:50:13


--------------------
Go to the top of the page
+Quote Post
darko
post 13.10.2012, 21:54:40
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


  1. $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
  2.  
  3. foreach($iterator as $key=>$value) {
  4. echo $key.' -- '.$value.'<br />';
  5. }

http://stackoverflow.com/questions/26007/i...-in-php#2149106


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
thek
post 13.10.2012, 22:12:29
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A dlaczego przy porównaniu nie sprawdzisz typu? $zmienna == '' i $zmienna === '' to dwie nieco inne rzeczy i warto nieraz z tego rozróżnienia korzystać.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
cudny
post 13.10.2012, 22:22:06
Post #6





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


Nie za bardzo nadal rozumiem pytanie i uderzam w ciemno ale mam nadzieję, że pomogę.

Jeśli chodzi o to czy nie puste i nie int 0 to daj prosty warunek

  1. if(!$val && $val !== 0) $array[$index] = NULL;


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
markonix
post 13.10.2012, 22:24:24
Post #7





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


thek - dzięki za uwagę, faktycznie tutaj jest do dla mnie wręcz obowiązkowe (dam potem pomógł żeby nie oznaczać tematu wink.gif )

darko - nie rozumiem zupełnie w czym mi to ma pomóc.

  1. $aa = $aa === '' ? NULL : $aa;
  2. $bb = $bb === '' ? NULL : $bb;
  3. $cc = $cc === '' ? NULL : $cc;
  4. itd..


Chce po prostu ubrać powyższe w jakąś uniwersalną funkcję (helper) bo czuje, że nie raz mi się to jeszcze przyda.

Ten post edytował markonix 13.10.2012, 22:25:08


--------------------
Go to the top of the page
+Quote Post
thek
post 13.10.2012, 23:21:49
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Darko podrzucił Ci sposób iteracji przez tablice. Ja ze swojej strony ciutkę bym zmodyfikował formularz. Pamiętaj że w html5 weszło definiowanie typu, które śmiało możesz wykorzystać i tu. W końcu jako osoba, która tworzy/generuje formularz, możesz oprzeć się o wszystko co tam pchniesz. A gdybyś tak zdefiniował typ inputa, to czemu by tego nie wykorzystać? Walisz sobie <input type="number" /> (defaultowo, jeśli przeglądarka nie obsługuje, uznaje nowe typy za zwykły text, więc masz fallback) i przy walidacji możesz użyć ctype_digit, is_int czy inne takie, a wtedy zareagować. Zrób więc helper formularza.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
markonix
post 14.10.2012, 01:06:06
Post #9





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Niestety widoki to nie moja działka tak więc wolałbym serwerowa rozwiązanie wink.gif
Poza tym firefox nawet numbersów jeszcze nie obsługuje..


--------------------
Go to the top of the page
+Quote Post
thek
post 14.10.2012, 11:54:08
Post #10





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ale ja mówię o serwerowej wersji. Widok jest generowany na podstawie tego, co dajesz na wejściu do generatora formularza. A typ można przecież określić jako parametr elementu formularza. Zresztą najczęściej wszelkie generatory wymagają go, by określić z jakim typem pola mamy do czynienia ( input wszak może już teraz przyjąć: hidden, radio, text, checkbox). Dodanie kolejnych to nie problem. Nowe typy jednakże są obsługiwane jedynie client-side i po stronie serwera też muszą być walidowane. Teraz wystarczy jedynie zdefiniować abstrakcyjną klasę bazową Field z paroma własnościami i metodami, z której będziesz dziedziczył tworząc textarea czy input. Jedną z własności abstrakcyjnych będzie zapewne type i metody setType, getType, isValid. To właśnie w tej ostatniej sobie walidację ładnie na podstawie ustalonej dla danego pola formularza własności Type sprawdzisz. Jak? Z requesta bindujesz do zdefiniowanego formularza wartości z $_POST i przeprowadzasz walidację. Jeśli jest Ok, to zapis i forward na jakąś stronę... Jeśli nie, bindujesz form do widoku i wyświetlasz. Zauważ, że tutaj wszystko się dzieje server-side. Nic nie robisz po stronie klienta. A sam formularz to byłby zapewne kolejny obiekt, który trzymałby po prostu obiekty klas dziedziczonych po Field. To co chcesz zrobić, byłoby albo osobnym obiektem, albo związane z obiektem kasy Validation, jeśli taką przewidujesz.
Powód edycji: [thek]: Taka informacja... input type="number" obsługuje Opera i Chrome. Fx pewnie niedługo dołączy.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
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: 18.08.2025 - 18:42