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
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
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));

Go to the top of the page
+Quote Post
markonix
post
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
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
Go to the top of the page
+Quote Post
thek
post
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ć.
Go to the top of the page
+Quote Post
cudny
post
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;
Go to the top of the page
+Quote Post
markonix
post
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 (IMG:style_emoticons/default/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
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.
Go to the top of the page
+Quote Post
markonix
post
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 (IMG:style_emoticons/default/wink.gif)
Poza tym firefox nawet numbersów jeszcze nie obsługuje..
Go to the top of the page
+Quote Post
thek
post
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.
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: 18.12.2025 - 03:09