Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Tablice - usuwanie pustych wartości
Forum PHP.pl > Forum > PHP
sebekzosw
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?
Eagle
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. }
smentek
Metoda unset() poszukaj w manualu phpa. Tylko dlaczego miałbyś usuwać indeksy tablicy? Wybierz to co cie interesuje a pustymi indeksami się nie przejmuj.
sebekzosw
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?
plurr
array_filter oraz funkcja zwracająca wartość niepustą.
korro
  1. $array1 = array("a", "b", "", "d", "");
  2. print_r($array1);
sebekzosw
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
korro
Przeczytaj manual do array_filter, albo spójrz na mój przykład wyżej.
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.