Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przykład użycia instrukcji explode ? albo trim ?
Forum PHP.pl > Forum > Przedszkole
php__amator
Witam,
Potrzebuje prostego acz szczegółowego wyjaśnienia jak działa i jak użyć explode
najlepiej w postaci przykładu.
Nie odsyłajcie mnie do googli czy do manuali.
Nie dlatego że jestem leniwy ale dlatego, że szybciej i łatwiej opanować coś jak ktoś znający opowie niż główkując
nad masą listingów które i tak niczego nie wyjaśniają smile.gif

Jakiś czas temu zrobiłem taki prosty generator, bardzo przydatny podczas tworzenia Recovery partition.
Przydatny bo dzięki niemu nie musze z ręki wszystkiego klepać a wystarczy skopiować ID dysku na którym będzie partycja Recovery i jednym klikiem utworzyć plik który z kolei zrobi wszystko co trzeba. I dlatego potrzebuje usprawnić skrypt aby nie motać się z przepisywaniem tylko skopiować większy fragment z którego będzie wybrany tylko ten interesujący kawałek.

Chyba nie dostatecznie jasno sie wyraziłem ale jeśli nie to poniżej postaram się pokazać.
Na przykład z tego fragmentu .. "

systemroot \Windows
resumeobject {4aa0d252-f354-11e2-8269-bae2a98b7ee3}
nx OptIn ..."

potrzebuję wyciąć sekwencje znakow xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx czyli z linii "resumeobject" bez nawiasów.
Kopiuje poprostu fragment z command line'u wklejam do input'a a skrypt juz sobie sam wytnie co potrzebne do wygenerowania potrzebnego batch'a bez marnowania czasu na przeklepywanie.

I właśnie daltego potrzebuje przykladu smile.gif
Wesołych świąt smile.gif
Turson
Tak bardzo łopatologicznie
  1. $string = "systemroot \Windows
  2. resumeobject {4aa0d252-f354-11e2-8269-bae2a98b7ee3} nx OptIn";
  3. $new = explode("{", $string);
  4. $new = str_replace("} nx OptIn", "", $new[1]);
  5. //$new = str_replace("}", "", $new);
  6. $new = explode('-',$new);
  7. print_r($new);
php__amator
oo dzięki Turson
Mogłbyś jako komentarze dodać odrobinę opisów celem objaśnienia co co robi ?
Dziękuję

  1. $string = "systemroot \Windows
  2. resumeobject {4aa0d252-f354-11e2-8269-bae2a98b7ee3} nx OptIn"; // pobrany string
  3. $new = explode("{", $string); // czy począwszy od tego znaku zaczyna wycinanie ?
  4. $new = str_replace("} nx OptIn", "", $new[1]);
  5. $new = explode('-',$new); // czy tu pomija określony znak ?
  6. print_r($new); // drukuje wartości zapisane w array ?
Turson
  1. $string = "systemroot \Windows
  2. resumeobject {4aa0d252-f354-11e2-8269-bae2a98b7ee3} nx OptIn";
  3. $new = explode("{", $string); //rozdziela string wg znaku { daj sobie print r tego to zobaczysz rezultat
  4. $new = str_replace("} nx OptIn", "", $new[1]); //wywala niepotrzebne elementy daj echo $new[1] to zobaczysz jak wyglada przed
  5. $new = explode('-',$new); //znowu rozdziela
  6. print_r($new);
php__amator
Turson, opanowałem mniej więcej ten przykład, kolejne pytanie:
jak zatrzymać wyszukiwanie ?
Dlaczego ? Dlatego, że po wrzuceniu dłuższego fragmentu, jak ten:

"recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {4aa0d252-f354-11e2-8269-bae2a98b7ee3}
nx OptIn"

nie kończy na ostatniej sekwencji "bae2a98b7ee3" i ta ostatnia sekwencja wyglada tak:
"bae2a98b7ee3} nx OptIn"

Po znaku"}" nie powinien już dalej działać, nie powinien też dołączać znaku "}" do $new[4].
Jak tego uniknąć ?

Zauważyłem, że jeśli ograniczę string do znaku "}" to wygląda OK ale jeśli cokolwiek następuje po znaku "}" to jest wyświetlane tuż za nim.
maviozo
Można jeszcze tak:
  1. $zmienna = "recoveryenabled Yes
  2. osdevice partition=C:
  3. systemroot \Windows
  4. resumeobject {4aa0d252-f354-11e2-8269-bae2a98b7ee3}
  5. nx OptIn
  6. recoveryenabled Yes
  7. osdevice partition=C:
  8. systemroot \Windows
  9. resumeobject {4a231452-f354-11xx-8269-ba34v98b7ee3}
  10. nx OptIn";
  11. preg_match_all('#\{([a-z0-9]{8}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{12})\}#',$zmienna,$wynik);
  12.  
  13. print_r($wynik);

Wszystkie wyniki w $wynik[1] to Twoje odfiltrowane ID bez nawiasów. Jest to bardzo prosty regexp, bo nie jestem jeszcze tytanem wyrażeń regularnych. Wydaje mi się jednak, że tak czy inaczej jest funkcjonalniej smile.gif
php__amator
Cytat(maviozo @ 26.12.2013, 15:26:43 ) *
Można jeszcze tak:
  1. $zmienna = "recoveryenabled Yes
  2. osdevice partition=C:
  3. systemroot \Windows
  4. resumeobject {4aa0d252-f354-11e2-8269-bae2a98b7ee3}
  5. nx OptIn
  6. recoveryenabled Yes
  7. osdevice partition=C:
  8. systemroot \Windows
  9. resumeobject {4a231452-f354-11xx-8269-ba34v98b7ee3}
  10. nx OptIn";
  11. preg_match_all('#\{([a-z0-9]{8}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{4}\-[a-z0-9]{12})\}#',$zmienna,$wynik);
  12.  
  13. print_r($wynik);

Wszystkie wyniki w $wynik[1] to Twoje odfiltrowane ID bez nawiasów. Jest to bardzo prosty regexp, bo nie jestem jeszcze tytanem wyrażeń regularnych. Wydaje mi się jednak, że tak czy inaczej jest funkcjonalniej smile.gif


Hej maviozo, bardzo interesujaca metoda zeby przefiltrowac dane, super, naprawde podoba mi sie to rozwiązanie, pytanie jednak mi sue nasunelo
jak wyswietlic zmienna zawarta w array wynik, kombinuje na wszelkie znane mi sposoby (niema ich zbyt wiele) i jedyne co mi pozwala wyswietlic to : Array ( [0] => {4aa0d252-f354-11e2-8269-bae2a98b7ee3} )
a ja potrzebuje ten wyfiltrowany fragment: {4aa0d252-f354-11e2-8269-bae2a98b7ee3} wkleic do innego skryptu.
i za diabla nie moge sobie poradzic smile.gif

phpion
  1. foreach ($wynik[0] as $resumeobject) {
  2. var_dump($resumeobject);
  3. }

lub jeśli chcesz bez nawiasów to $wynik[1].
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.