Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Funkcja zwracająca tablicę danych, jak zmodyfikować funkcje aby otrzymać kilka tablic
pela222
post 26.03.2021, 13:41:54
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


Cześć,
postaram się jak najlepiej opisać co chcę osiągnąć.
Poniżej jak to jest teraz:

  1. //Rekomendacja
  2. private function getRecomendationWOL($documentData) {
  3. $policies = $documentData['policies']['WOL'];
  4.  
  5. $recomend = array();
  6. $count = count($policies);
  7. for($n=0; $n<$count; $n++){
  8. //--- START grupa 1 ---
  9. $recomend[] = array('Podstawowe informacje ('.$policies[$n]['lifeInsured'].') ... '.$policies[$n]['company'].': ');
  10. $recomend[] = array('Podstawowe cd. '.$documentData['primary']['firstName'].' to ?'.$policies[$n]['primary']['lifeCover'].'. '.$policies[$n]['DOC']['lifedis'].'');
  11. $recomend[] = array('Podstawowe cd. '.$policies[$n]['DOC']['lifechanges']);
  12. //--- START grupa 2 ---
  13. $recomend[] = array('Informacje GRUPA 2.');
  14. $recomend[] = array('Informacje GRUPA 2 cd. .');
  15. //--- START grupa 3 ---
  16. $recomend[] = array('Dodatkowo informacje GRUPA 3');
  17. foreach ($policies[$n]['DOC']['companydis'] as $value) {
  18. if(!is_array($value)){
  19. $recomend[] = array($value);
  20. }
  21. }
  22. }
  23. return $recomend;
  24. }


A potem wywołuję to tak i w ten sposób tworze formularz html:

  1. public function __construct(DocumentData $documentData = null) {
  2.  
  3. if (!$documentData) {
  4. $documentData = new DocumentData();
  5. }
  6. $documentData = $documentData->getData();
  7.  
  8. //throw new Exception('<pre>'.print_r($documentData['policies'],1). '</pre>');
  9.  
  10. $this->group1 = array (
  11. 'common1' => array (
  12. 'name' => 'Opis',
  13. 'elements'=> array (
  14. 'multiText' => array(
  15. 'type' => 'textMulti',
  16. 'label' => 'Wprowadzenie',
  17. 'optional' => true, // false -> bez checkbox
  18. 'partitions' => $this->getRecomendationWOL($documentData)
  19. ),
  20. ),
  21. ),
  22. );

No i jest ok i to działa.
Teraz wywołując $this->getRecomendationWOL otrzymuję
  1. [common1] => Array
  2. (
  3. [multiText] => Array
  4. (
  5. [0] => Podstawowe informacje (dane osoby) ... (dane firmy):
  6. [1] => Podstawowe cd.
  7. [2] => Podstawowe cd.
  8. [3] => Informacje GRUPA 2.
  9. [4] => Informacje GRUPA 2 cd.
  10. [5] => Dodatkowo informacje GRUPA 3
  11. [6] => Dodatkowo informacje GRUPA 3 cd.
  12.  


A to co chciałbym uzyskać to możliwość wywołania osobno danych dla Grupy 1 / Grupy 2 / Grupy 3

  1. $this->group1 = array (
  2. 'common1 => array (
  3. 'name' => 'Opis1',
  4. 'elements'=> array (
  5. 'multiText' => array(
  6. 'type' => 'textMulti',
  7. 'label' => 'GROUPA 1',
  8. 'optional' => true, // false -> bez checkbox
  9. 'partitions' => $this->getRecomendationWOL1($documentData)
  10. ),
  11. 'multiText1' => array(
  12. 'type' => 'textMulti',
  13. 'label' => 'GRUPA 2',
  14. 'optional' => true, // false -> bez checkbox
  15. 'partitions' => $this->RecomendationWOL2($documentData)
  16. ),
  17. 'multiText2' => array(
  18. 'type' => 'textMulti',
  19. 'label' => 'GRUPA 3',
  20. 'optional' => true, // false -> bez checkbox
  21. 'partitions' => $this->RecomendationWOL3($documentData)
  22. ),
  23. ),
  24. ),
  25. );


Dziękuję za informacje jak to osiągnąć i za wyrozumiałość.

Domyślam się że muszę zmodyfikować:
return $recomend;
na coś w stylu:
public function getValues() {
return array (
'group1' => $this->recomend[1][],
'group2' => $this->recomend[2][],
'group3' => $this->recomend[3][]
);
}

No ale nie potrafię sobie sam z tym poradzić...
Dziękuję jak zawsze za wyrozumiałość.

Temat do zamknięcia

wystarczyło dane w tablicy zapisać jako
  1. $recomend[group1][] = array('Podstawowe informacje ('.$policies[$n]['lifeInsured'].') ... '.$policies[$n]['company'].': ');
  2. ...
  3. $recomend[group2][] = array('Informacje GRUPA 2.');


a potem wywołać funkcje poprzez
  1. $this->getRecomendationWOL($documentData)[group1]
  2. ...
  3. $this->getRecomendationWOL($documentData)[group2]


Ten post edytował pela222 26.03.2021, 13:42:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pela222
post 7.04.2021, 11:33:01
Post #2





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

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


Ok. Spróbuję wytłumaczyć lepiej cały workflow.
Na podstawie tego:

  1. ///Jakiś tam wstęp dla każdego klienta
  2. 'common1' => array (
  3. 'name' => '1. Wprowadzenie',
  4. 'elements'=> array (
  5. 'multiText' => array(
  6. 'type' => 'textMulti',
  7. 'label' => 'Wprowadzenie',
  8. 'optional' => true, // false -> bez checkbox
  9. 'partitions' => $this->getIntroData($documentData)
  10. ),
  11. ),
  12. ),
  13. ///Jakieś kolejne common z opisami dla każdego
  14. ///...
  15. ///Tutaj już zaczyna się tablica z danymi o polisach
  16. ///Dla polisy o typie Life Term - !TYLKO! wtedy gdy rekord ma taki typ polisy
  17. 'common4' => array (
  18. 'name' => '? Rekomendacja Life Term + Mortgage' .$count,
  19. 'elements'=> array (
  20. 'multiText' => array(
  21. 'type' => 'textMultiList',
  22. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  23. 'optional' => true, // false -> bez checkbox
  24. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[1]
  25. ),
  26. ),
  27. ),
  28. ///Dla polisy o typie Whole of Life - !TYLKO! wtedy gdy rekord ma taki typ polisy
  29. 'common7' => array (
  30. 'name' => '? Rekomendacja Whole of Life',
  31. 'elements'=> array (
  32. 'multiText' => array(
  33. 'type' => 'textMultiList',
  34. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  35. 'optional' => true, // false -> bez checkbox
  36. 'partitions' => $this->getRecomendationWOL($documentData)[1]
  37. ),
  38. ),
  39. ),
  40. ///Dla plisy o typie Multi claim - !TYLKO! wtedy gdy rekord ma taki typ polisy
  41. 'common8' => array (
  42. 'name' => '? Rekomendacja Multi-claim',
  43. 'elements'=> array (
  44. 'multiText' => array(
  45. 'type' => 'textMultiList',
  46. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  47. 'optional' => true, // false -> bez checkbox
  48. 'partitions' => $this->getRecomendationMCPC($documentData)[1]
  49. ),
  50. ),
  51. ),
  52. );


Tak wygląda utworzona tablica gdy kontakt nie ma polisy Multi Claim:
  1. Array
  2. (
  3. [common1] => Array
  4. (
  5. [name] => ? Wprowadzenie
  6. [elements] => Array
  7. (
  8. [multiText] => Array
  9. (
  10. [type] => textMulti
  11. [label] => Wprowadzenie
  12. [optional] => 1
  13. [partitions] => Array
  14. (
  15. [0] => Array
  16. (
  17. [0] => Dziękuję za poświęcenie czasu.....
  18. )
  19.  
  20. [1] => Array
  21. (
  22. [0] => Na podstawie zebranych informacji i po dokonaniu analizy rynku zidentyfikowałem, że Wasze potrzeby...
  23. )
  24.  
  25. [2] => Array
  26. (
  27. [0] => Omówiliśmy produkty w firmach.....
  28. )
  29. )
  30. )
  31. )
  32. )
  33. [common4] => Array
  34. (
  35. [name] => ? Rekomendacja Life Term + Mortgage
  36. [elements] => Array
  37. (
  38. [multiText] => Array
  39. (
  40. [type] => textMultiList
  41. [label] => Dodatkowo omówiono i zaproponowano następujące cechy i elementy:
  42. [optional] => 1
  43. [partitions] => Array
  44. (
  45. [0] => Array
  46. (
  47. [0] => Ubezpieczenie nie zawiera opcji indeksacji / ochrony przed inflacją.
  48. )
  49.  
  50. [1] => Array
  51. (
  52. [0] => Ochrona kontynuacji (Protection Continuation Option), czyli ...
  53. )
  54.  
  55. [2] => Array
  56. (
  57. [0] => Gwarancja wysokości składki oznacza, że Twoja składka która wyniesie 64;12 i pozostanie niezmienna przez cały okres trwania polisy...
  58. )
  59. )
  60. )
  61. )
  62. )
  63. [common7] => Array
  64. (
  65. [name] => ? Rekomendacja Whole of Life
  66. [elements] => Array
  67. (
  68. [multiText] => Array
  69. (
  70. [type] => textMultiList
  71. [label] => Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie
  72. [optional] => 1
  73. [partitions] => Array
  74. (
  75. [0] => Array
  76. (
  77. [0] => Podstawowe elementy ubezpieczenia zarekomendowane dla (Chester Tester) na ubezpieczeniu z firmą...
  78. )
  79.  
  80. [1] => Array
  81. (
  82. [0] => Utraty życia, gdzie rekomendowana suma ubezpieczenia dla Chester to ?120,000. Ubezpieczenie Whole of Life to plan bezterminowego ubezpieczenia na całe życie, ....
  83. )
  84.  
  85. [2] => Array
  86. (
  87. [0] => Plan posiada opcję Life Changes Option, która ....".
  88. )
  89.  
  90. [3] => Array
  91. (
  92. [0] => Coś jeszcze o WOL
  93. )
  94. )
  95. )
  96. )
  97. )
  98. [common8] => Array
  99. (
  100. [name] => ? Rekomendacja Multi-claim
  101. [elements] => Array
  102. (
  103. [multiText] => Array
  104. (
  105. [type] => textMultiList
  106. [label] => Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie
  107. [optional] => 1
  108. [partitions] =>
  109. )
  110. )
  111. )
  112. )


Na podstawie tej tablicy generuje się formularz HTML. Struktura tej tablicy musi spełniać kryteria validacji aby wygenerował się formularz smile.gif
Zmienna [type] określa czy to jest pole <textarea> czy może <input> czy <input> z checkbox ect.
Zmienna [partitions] dla typu testMultiList (używanego tutaj) np. musi być tablicą z jedną lub dwoma zmiennymi. Czyli musi być tak:
  1. [partitions] => Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => coś tam
  6. )

albo
  1. [partitions] => Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => coś tam
  6. [1] => coś tam dwa
  7. )
  8.  

Przy czym akurat tutaj zawsze jest to ten pierwszy przypadek.

Po usunięciu group1, group2 nie ma już tyż if dla nich. Więc jesli klient nie posiada polisy np. Multi Claim (jak wyżej) to tablica generuje się tak, że [partitions] array nie ma elementówi, nie spełnia walidacji, wiec wywala błąd (funkcja getRecomendationMCPC($documentData) nic nie zwraca - zresztą prawidłowo)
Tak jak pisałem porobiłem sobie te group1, group2 dla poszczególnych sekcji, dodałem if i dzięki temu jak klient nie miał danej polisy to ta zmienna nie generowała się w tablicy i generator html nie miał błędu i generował formularz bez tej sekcji.

Dla ciebie łątwiej jest latać po tak zbudowanej tablicy, a ja nie wiem jak zrobić żeby np. [common8] (np. odpowiadające typowi polisy Multi Claim) nie było umieszczone w tej tablicy jeśli Polisa Multi Claim nie występuje dla tego kontaktu. (co wcześniej załatwiałem poprzez ten if).

No ale koniec końców wracając do meritum ... cały czas nie potrafię zrobić iteracji jeśli jest kilka polis jednego typu...co przy takim zapisie realizowało by sie przez tworzenie kolejnego common4_1 (czy jak byśmy to nazwali nie ma znaczenia) .. w każdym razie kolejne common jeśli liczba polis o typie np. Term Life jest wiecej niż 1.

Ten post edytował pela222 7.04.2021, 13:10:38
Go to the top of the page
+Quote Post

Posty w temacie
- pela222   [PHP]Funkcja zwracająca tablicę danych   26.03.2021, 13:41:54
- - nospor   Nie $recomend[group1][] a $recomend[...   26.03.2021, 15:34:57
- - pela222   Ok to jeszcze jedno pytanie: [PHP] pobierz, plaint...   6.04.2021, 09:56:54
- - nospor   Ja nie kumam o co pytasz. Jakos to skomplikowane d...   6.04.2021, 10:51:45
- - pela222   Ok. Nie jestem autorem tego kodu, a jedynie modyfi...   6.04.2021, 13:11:38
- - nospor   Mi nie chodzilo stricte o zmienne prywatne, tylko ...   6.04.2021, 13:13:57
- - pela222   Ponieważ na podstawie tak stworzonej tablicy ze zm...   6.04.2021, 13:31:07
- - nospor   Dlatego ci mowie zrob z tego tablice z grupami. La...   6.04.2021, 14:26:22
- - pela222   Wiem że teraz to pewnie załamiesz ręce ale mam stw...   6.04.2021, 14:43:14
- - nospor   Hehe, no zalamalem   6.04.2021, 14:56:40
- - pela222   No się pośmialiśmy z mojego dyletanctwa i braku wi...   6.04.2021, 15:31:54
- - nospor   Nie. Caly czas ci mowie: Nie tysiac zmiennych dla ...   6.04.2021, 16:20:26
- - pela222   Jeśli o to chodziło to nie rozumiem co to wnosi......   6.04.2021, 17:12:41
- - nospor   Ano to wnosi, ze jest latwiejsze do pracy Nie roz...   7.04.2021, 09:39:25
- - pela222   RE: [PHP]Funkcja zwracająca tablicę danych   7.04.2021, 11:33:01
- - gino   można tak dodać do tablicy w zależności od warunku...   8.04.2021, 09:38:17
- - pela222   No tak można bo tak to miałem ... co prawda miałem...   8.04.2021, 09:43:14
- - gino   Cytat@nospor Mi nie chodzilo stricte o zmienne pry...   8.04.2021, 09:54:23
- - pela222   Ale wcześniej też tworzyłem jedną tablicę wielowym...   8.04.2021, 10:24:44
- - gino   Jak sam napisałeś CytatKiedyś tak to miałem (plik ...   8.04.2021, 10:46:08
- - pela222   [PHP] pobierz, plaintext // Tutaj zaczyna się sek...   8.04.2021, 12:14:32
- - gino   Po mojemu to tak: Kod private $groups = array...   8.04.2021, 13:43:01
- - pela222   RE: [PHP]Funkcja zwracająca tablicę danych   9.04.2021, 13:52:17
- - nospor   Strasznie ciezko sie czyta ten kod. Pewnie gino og...   9.04.2021, 14:12:48


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: 14.08.2025 - 22:18