Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Uproszczenie IFa
Forum PHP.pl > Forum > Przedszkole
AdamT
Witajcie,

dawno mnie nie było.. i dawno nic nie pisałem tongue.gif Prośba o podpowiedź jak można uprościć taką instrukcję:

  1. echo "UID: ";
  2.  
  3. if (strpos($row[0], $uid) !== FALSE){
  4. echo " wystepuje w kluczu 1, ";
  5. if (strpos($row[1], $uid) !== FALSE){
  6. echo " wystepuje w kluczu 2, ";
  7. if (strpos($row[2], $uid) !== FALSE){
  8. echo " wystepuje w kluczu 3, ";
  9. if (strpos($row[3], $uid) !== FALSE){
  10. echo " wystepuje w kluczu 4, ";
  11. if (strpos($row[4], $uid) !== FALSE){
  12. echo " wystepuje w kluczu 5, ";
  13. if (strpos($row[5], $uid) !== FALSE){
  14. echo " wystepuje w kluczu 6, ";
  15. if (strpos($row[6], $uid) !== FALSE){
  16. echo " wystepuje w kluczu 7, ";
  17. if (strpos($row[7], $uid) !== FALSE){
  18. echo " wystepuje w kluczu 8, ";
  19. if (strpos($row[8], $uid) !== FALSE){
  20. echo " wystepuje w kluczu 9, ";
  21. if (strpos($row[9], $uid) !== FALSE){
  22. echo "wystepuje w kluczu 10, ";
  23. } else { echo " nie wystepuje w kluczu 10 !"; }
  24. } else { echo " nie wystepuje w kluczu 9, "; }
  25. } else { echo " nie wystepuje w kluczu 8, "; }
  26. } else { echo " nie wystepuje w kluczu 7, "; }
  27. } else { echo " nie wystepuje w kluczu 6, "; }
  28. } else { echo " nie wystepuje w kluczu 5, "; }
  29. } else { echo " nie wystepuje w kluczu 4, "; }
  30. } else { echo " nie wystepuje w kluczu 3, "; }
  31. } else { echo " nie wystepuje w kluczu 2, "; }
  32. } else { echo " nie wystepuje w kluczu 1, "; }
trueblue
  1. $uid = 1;
  2. $row = array(1, 2, 1, 3, 4, 1, 10, 8, 1);
  3. $arr = array_fill(0,count($row), $uid);
  4.  
  5. foreach( array_intersect( $row, $arr) as $index=>$value){
  6. echo "wystepuje w kluczu ".($index+1);
  7. }
  8. foreach( array_diff_assoc( $arr, $row) as $index=>$value){
  9. echo "nie wystepuje w kluczu ".($index+1);
  10. }
by_ikar
Przecież tutaj wystarczy jeden foreach z jednym ifem w środku.
AdamT
Chyba coś nie do końca mi te foreach działa :/

To wprowadzam do formularza:
key: {data1: [u'1234'], data2: [u'1234'], data3: [u'1234'], data4: [u'2345', u'3456', u'4567', u'9632', u'4568', u'9876', u'7892', u'8523'],
data5: [u'1234']}
uid: 1234

Kod:
  1. <?php
  2. // Pobieramy dane z formularza
  3. $key = $_POST['key'];
  4. $uid = $_POST['uid'];
  5.  
  6. // Tworzymy tabelę kluczy, za pomocą wzorca
  7. preg_match_all("/\[u\'+.+\'\]/U", $key, $result);
  8.  
  9. // Wyświetlamy wyniki
  10. $display = print_r($result, TRUE);;
  11. $display = str_replace(" ", "&nbsp;", $display);
  12. $display = nl2br($display);
  13. echo($display);
  14.  
  15. // Dotąd jest OK
  16. // Teraz musimy przeszukać powstała tabelę pod kątem występowania ID
  17. foreach ($result as $row){
  18.  
  19. echo $uid;
  20.  
  21. $arr = array_fill(0,count($row), $uid);
  22.  
  23. foreach( array_intersect( $row, $arr) as $index=>$value){
  24. echo " wystepuje w kluczu ".($index+1);
  25. }
  26. foreach( array_diff_assoc( $arr, $row) as $index=>$value){
  27. echo " nie wystepuje w kluczu ".($index+1)."!";
  28. }
  29. }
  30. ?>


Zwraca: 1234 nie wystepuje w kluczu 1! nie wystepuje w kluczu 2! nie wystepuje w kluczu 3! nie wystepuje w kluczu 4! nie wystepuje w kluczu 5! sad.gif

Dalej będzie jeszcze instrukcja warunkowa, że jak występuje uid we wszystkich kluczach to OK... ale to już chyba dam radętongue.gif
trueblue
A jak wygląda tablica $row?
AdamT
Cytat(trueblue @ 8.09.2017, 10:58:17 ) *
A jak wygląda tablica $row?


Tak zwraca preg_match_all:

Array
(
[0] => Array
(
[0] => [u'1234']
[1] => [u'1234', u'4567']
[2] => [u'1234']
[3] => [u'2345', u'3456', u'4567', u'9632', u'4568', u'9876', u'7892', u'8523']
[4] => [u'1234']
)

)
trueblue
Rozwiązanie zaproponowane przez by_ikar będzie tu odpowiedniejsze, choćby ze względu na format wartości.

  1. $uid = "9632";
  2. $row = array("u'2345'", "u'3456'", "u'4567'", "u'9632'", "u'4568'", "u'9876'", "u'7892'", "u'8523'");
  3.  
  4. foreach( $row as $index => $value){
  5. if( strpos( $value, $uid ) !== false){
  6. echo "wystepuje na pozycji " . ( $index + 1 ) . "<br/>";
  7. }
  8. else{
  9. echo "nie wystepuje na pozycji " . ( $index + 1 ) . "<br/>";
  10. }
  11. }
AdamT
Działa. Pięknie dziękuję smile.gif
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.