Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] sprawdzanie długości wyrazów w każdej linii
Forum PHP.pl > Forum > PHP
jacek115
Witam,

stworzyłem sobie listę adresów emailowych, która ukazuje się w taki sposób:

Kod
     pracownik-abc@firma.pl<br>
    
       pracownik-abcde@firma.pl<br>
      
       pracownik-abcd@firma.pl<br>
      
       pracownik-abcdef@firma.pl<br>
    
       pracownik-ab@firma.pl<br>
    
       pracownik-abcdefg@firma.pl<br>



Chciałbym ją posortować według ilość znaków każdego adresu emailowego. Nie chodzi mi o sortowanie alfabetyczne, ale od najkrótszego do najdłuższego.

Żeby wyglądało to mniej więcej tak:

Kod
pracownik-ab@firma.pl
  
   pracownik-abc@firma.pl
  
   pracownik-abcd@firma.pl
  
   pracownik-abcde@firma.pl
  
   pracownik-abcdef@firma.pl
  
   pracownik-abcdefg@firma.pl



Doszedłem już do tego że żeby zmierzyć ilość znaków muszę użyć "strlen", ale nadal nie wiem jak zmierzyć ilość znaków każdej osobnej linii, tak żeby można to było później posortować.

Czy ktoś może wie jak mogę to zrobić ?

Nie chciałbym wrzucać tej listy do bazy danych, gdyż będzie ona generowana jedynie na krótki okres i zajmowałoby to jedynie niepotrzebnie miejsce.
kubek15
Jeżeli masz to w jakims pliku to normalnie jedziesz w petli i dajesz żeby liczyło ci znaki w linki i potem przechodzenie do nowej itd. Pętlą While możesz to spokojnie zrobić.
jacek115
Cytat(kubek15 @ 3.10.2009, 21:28:24 ) *
Jeżeli masz to w jakims pliku to normalnie jedziesz w petli i dajesz żeby liczyło ci znaki w linki i potem przechodzenie do nowej itd. Pętlą While możesz to spokojnie zrobić.


Ale właśnie nie za bardzo wiem jak zrobić żeby liczyło znaki każdego adresu z osobna.
cojack
Proste jak budowa cepa, od tego jest funkcja usort wygląda to mniej więcej tak:

  1. function cmp($a, $b) {
  2. if ( $a == $b )
  3. return 0;
  4. return( strlen($a) < strlen($b) ) : -1 ? 1;
  5. }
  6.  
  7. usort($array,'cmp');
  8.  
  9. print_r($array);


Dziękuje.
jacek115
wielkie dzięki cojack

po zamianie
  1. -1 ? 1;


na
  1. -1 : 1;


działa właśnie tak ja chciałem.

Teraz głowie się tylko nad tym jak umieścić wszystkie te adresy w tablicy (array), bo jak już wcześniej wspomniałem mam je w takiej formie:

  1. pracownik-abc@firma.pl<br>
  2.  
  3. pracownik-abcde@firma.pl<br>
  4.  
  5. pracownik-abcd@firma.pl<br>
  6.  
  7. pracownik-abcdef@firma.pl<br>
  8.  
  9. pracownik-ab@firma.pl<br>
  10.  
  11. pracownik-abcdefg@firma.pl<br>


i są one w zmiennej pobrane funkcją file_get_contents z innej podstrony.

redeemer
Skorzystaj z funkcji file(), a nie file_get_contents();
jacek115
Cytat(redeemer @ 4.10.2009, 10:11:22 ) *
Skorzystaj z funkcji file(), a nie file_get_contents();



żeby skorzystać z funkcji file() czy nie musiałbym zapisać wcześniej wszystkich adresów w pliku ? Chciałbym uniknąć zapisywania ich w plikach, lub też bazie danych.
Wicepsik
  1. print_r(explode('<br>', $link));
cojack
A no sory, pytajniczki mi się pierdykły smile.gif

Ogólnie ta linijka powinna wyglądać tak:

  1. return( strlen($a) < strlen($b) ) ? -1 : 1;
jacek115
Wielkie dzięki wszystkim, działa świetnie biggrin.gif

Mam jeszcze tylko ostanie pytanie:


używając:
  1. print_r($emaile);


dostaje wyniki w takiej formie:

  1. pracownik-ab@firma.pl [1] => pracownik-abc@firma.pl [2] => pracownik-abcd@firma.pl [3] => pracownik-abcde@firma.pl [4]


Jak mogę pokazać wynik w takiej samej formie jak był poprzednio, przed sortowaniem ?

  1. pracownik-ab@firma.pl
  2.  
  3. pracownik-abc@firma.pl
  4.  
  5. pracownik-abcd@firma.pl
  6.  
  7. pracownik-abcde@firma.pl


krowal
Spróbuj tak:
  1. <?php
  2. $tak_jak_bylo_wczesniej = implode("\n\n", $tablica_adresow);
  3. ?>
jacek115
Cytat(krowal @ 5.10.2009, 07:28:08 ) *
Spróbuj tak:
[PHP] pobierz, plaintext
  1. <?php
  2. $tak_jak_bylo_wczesniej = implode("\n\n", $tablica_adresow);
  3. ?>
[PHP] pobierz, plaintext


Właśnie o to mi chodziło biggrin.gif

Wielkie dzięki jeszcze raz wszystkim za pomoc.
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.