Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Tablice - usuwanie pustych wartości
sebekzosw
post 23.12.2009, 01:23:40
Post #1





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


mam taki kod php:

  1. <html>
  2.  
  3. <head>
  4. <title></title>
  5. </head>
  6.  
  7. <body>
  8.  
  9. <?php
  10. if(isset($_POST["text"])) {
  11. $error = '';
  12. $error .= empty($_POST["text"]) ? 'Dodaj przynajmniej 1 linijkę tekstu!<br />' : '';
  13.  
  14. $entry_array = explode("\n", $_POST['text']);
  15. if (empty($entry_array)) $entry_array = explode(" ", $_POST['text']);
  16. foreach ($entry_array as $entry) echo $entry."<br />";
  17.  
  18. print_r($entry_array);
  19. echo "<br />".count($entry_array);
  20. }
  21. ?>
  22. <form action="" method="post">
  23. <textarea name="text" id="Name" rows="15" cols="100">Linijka z tekstem
  24.  
  25. </textarea>
  26. <input type="submit" name="Name" id="Name" value="Wyślij" />
  27. </form>
  28. </body>
  29.  
  30. </html>


Jak sprawdzę za pomocą print_r, co zawiera tablica, to widzę takie coś:

Kod
Array(
    [0] => Linijka z tekstem
    [1] =>
    [2] =>
)


Czyli używając funkcji count to zwraca mi 3... Jak mam usunąć te dwa puste wpisy w tablicy?

Ten post edytował sebekzosw 23.12.2009, 01:24:20
Go to the top of the page
+Quote Post
Eagle
post 23.12.2009, 01:31:31
Post #2





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

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


Możesz tak:

  1. $count = count($tablica)
  2.  
  3. for($i=0; $i!= $count; $i++)
  4. {
  5. if($tablica[$i] != '' or empty($tablica[$i]))
  6. {
  7. unset($tablica[$i]);
  8. }
  9. }
Go to the top of the page
+Quote Post
smentek
post 23.12.2009, 01:33:57
Post #3





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Metoda unset() poszukaj w manualu phpa. Tylko dlaczego miałbyś usuwać indeksy tablicy? Wybierz to co cie interesuje a pustymi indeksami się nie przejmuj.


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
sebekzosw
post 23.12.2009, 07:32:29
Post #4





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


Nie mogę się przejmować, bo nie mogę swobodnie zająć się zliczaniem rekordów...

rozwiązanie z pętlą jako pierwsze mi przyszło do głowy, ale nie chce robić tylu pętli - jest jakieś inne rozwiązanie?
Go to the top of the page
+Quote Post
plurr
post 23.12.2009, 08:20:54
Post #5





Grupa: Zarejestrowani
Postów: 175
Pomógł: 12
Dołączył: 28.06.2007
Skąd: Bytom

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


array_filter oraz funkcja zwracająca wartość niepustą.


--------------------
Wyobraźnia bez wiedzy może stworzyć rzeczy piękne.
Wiedza bez wyobraźni najwyżej doskonałe.

Albert Einstein
Go to the top of the page
+Quote Post
korro
post 23.12.2009, 08:26:47
Post #6





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

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


  1. $array1 = array("a", "b", "", "d", "");
  2. print_r($array1);


--------------------
Go to the top of the page
+Quote Post
sebekzosw
post 23.12.2009, 08:34:06
Post #7





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


Rzeczywiście, zapomniałem o tym - próbowałem wczoraj z array_filter ale nie wychodziło :|

Zamieszczam tutaj rozwiązanie z pętlą - usuwanie pustych elementów tablicy (puste wartości):
  1. foreach ($entry_array as $key => $value) if (strlen($entry_array[$key])<=1) unset($entry_array[$key]); //usuwanie pustych linijek
, gdzie $entry_array to zmienna tablicy

oraz rozwiązanie z filter_array:
  1. function puste($var) {
  2. if(strlen($var)>1) return true;
  3. }
  4.  
  5. print_r(array_filter($entry_array, "puste"));


Mam nadzieję, że komuś się to kiedyś przyda winksmiley.jpg
Go to the top of the page
+Quote Post
korro
post 23.12.2009, 08:36:15
Post #8





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

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


Przeczytaj manual do array_filter, albo spójrz na mój przykład wyżej.


--------------------
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: 23.04.2024 - 10:37