Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funkcja zwracająca tablicę danych
Forum PHP.pl > Forum > Przedszkole
pela222
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]
nospor
Nie
$recomend[group1][]

a
$recomend['group1'][]
pela222
Ok to jeszcze jedno pytanie:
  1. foreach ($documentData['policies'] as $type => &$policieType) {
  2. foreach ($policieType as &$policy) {
  3. // dla typu TerLifeIns
  4. if ($type == 'TerLifIns' || $type == 'MorIns') {
  5. $this->group5 = array (
  6. 'common4' => array (
  7. 'name' => '&bull; Rekomendacja Life Term + Mortgage',
  8. 'elements'=> array (
  9. 'multiText' => array(
  10. 'type' => 'textMultiList',
  11. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  12. 'optional' => true, // false -> bez checkbox
  13. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[1]
  14. ),
  15. 'multiText1' => array(
  16. 'type' => 'textMultiList',
  17. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  18. 'optional' => true, // false -> bez checkbox
  19. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[2]
  20. ),
  21. 'multiText2' => array(
  22. 'type' => 'textMultiList',
  23. 'label' => 'Opis Ubezpieczyciela',
  24. 'optional' => true, // false -> bez checkbox
  25. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[3]
  26. ),
  27. ),
  28. ),
  29. );
  30. }
  31. }
  32. }

Tak jak wyżej mam to teraz. Po zmianach wykonanych wczoraj

Jeśli mam wybrane dwa produkty tego samego rodzaju to dla każdego z tych produktu generuje mi formularz w tych sekcjach multiText, multiText1, multiText2. Czyli mam w sekcji multiText w tablicy (opis pierwszego , potem drugiego) w sekcji multiText1 (opis pierwszegom. potem drugiego)

A jak to zrobić żeby $this->group5 było generowane dla każdej z polis tak abym otrzymał

$this->group $var
$this->group $var2
...
gdzie var to kolejny produkt z tablicy polis.

Jeśli opis nie jest czytelny mogę wrzycić tablice jakie mam ... nie chciałem zaśmiecać dlatego opisałem...Mam nadzieję że czytelnie.


Ps1.
Jeśli mogę prosić o wskazówki to było by super. Pozdrawiam.

===EDIT 01/04/2021 ===
PS2 - Nie chcę zakładać nowego wątku, choć może powinienem. ... temat jest oznaczony jako rozwiązany. Nie mniej...

Podaję bardziej obszerny fragment kodu i znów liczę na wskazówki...Bo to chyba muszę ogarnąć jakąś funkcją bo pętlą nie zmierzam nigdzie...

  1. // Tutaj zaczyna się sekcja budowania formularza
  2. private $groups = array();
  3. private $group1 = array();
  4. // ...
  5. // kolejne zmienne dla group
  6. // ...
  7. private $group5 = array();
  8.  
  9. public function __construct(DocumentData $documentData = null) {
  10.  
  11. if (!$documentData) {
  12. $documentData = new DocumentData();
  13. }
  14.  
  15. // pobieranie danych dodatkowych zapisanych w bazie
  16. $dataReader = new AdditionalDataReader();
  17. $additionalData = $dataReader->read();
  18.  
  19. $documentData = $documentData->getData();
  20.  
  21. //throw new Exception('<pre>'.print_r($documentData['policies'],1). '</pre>');
  22.  
  23. $this->group1 = array (
  24. 'common1' => array (
  25. 'name' => '&bull; Wprowadzenie',
  26. 'elements'=> array (
  27. 'multiText' => array(
  28. 'type' => 'textMulti',
  29. 'label' => 'Wprowadzenie',
  30. 'optional' => true, // false -> bez checkbox
  31. 'partitions' => $this->getIntroData($documentData)
  32. ),
  33. ),
  34. ),
  35. );
  36.  
  37. // kolejne zmienne dla group
  38.  
  39.  
  40. foreach ($documentData['policies'] as $type => $policieType) {
  41. foreach ($policieType as $policy) {
  42. // dla typu TerLifeIns
  43. if ($type == 'TerLifIns' || $type == 'MorIns') {
  44.  
  45.  
  46. // Start wypociny --- wiem bez sensu ---
  47. //throw new Exception('<pre>'.print_r($policieType,1).'</pre>');
  48. $count = count($policieType);
  49. //throw new Exception('<pre>'.print_r($count,1).'</pre>');
  50. //Co zwraca mi dla np. dwóch zaznaczonych polis $count = 2
  51. //$section_name = 'group5';
  52. //for($n=0; $n<$count; $n++){
  53. //$var = '$section_name . $n';
  54. //throw new Exception('<pre>'.print_r($count,1).'</pre><br><pre>' .print_r($var,1).'</pre>');
  55. // Koniec wypocin
  56.  
  57. $this->group5 = array (
  58. 'common4' => array (
  59. 'name' => '&bull; Rekomendacja Life Term + Mortgage',
  60. 'elements'=> array (
  61. 'multiText' => array(
  62. 'type' => 'textMultiList',
  63. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  64. 'optional' => true, // false -> bez checkbox
  65. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[1]
  66. ),
  67. 'multiText1' => array(
  68. 'type' => 'textMultiList',
  69. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  70. 'optional' => true, // false -> bez checkbox
  71. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[2]
  72. ),
  73. 'multiText2' => array(
  74. 'type' => 'textMultiList',
  75. 'label' => 'Opis Ubezpieczyciela',
  76. 'optional' => true, // false -> bez checkbox
  77. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[3]
  78. ),
  79. ),
  80. ),
  81. );
  82. //throw new Exception('<pre>'.print_r($var,1).'</pre>)');
  83. }
  84. }
  85. //throw new Exception('<pre>'.print_r($group5,1).'</pre>');
  86.  
  87. }
  88. }
  89. $this->groups = $this->group1 + $this->group5;
  90. //oryginalny wpis $this->groups = $this->group1 + $this->group2 + $this->group3 + $this->group4 + $this->group5 + $this->group6 + $this->group7 + $this->group8;
  91.  
  92.  
  93. public function getGroups() {
  94. return $this->groups;
  95. }


//throw new Exception('<pre>'.print_r($policieType,1).'</pre>');
//Otrzymuje

  1. (
  2. [0] => Array
  3. (
  4. [company] => Firma
  5. [type] => Term Life Insurance
  6. [no] => 0
  7. [issueDate] => 2017-06-01
  8. [used] => yes
  9. [primary] => Array
  10. (
  11. [lifeCover] => 75,123
  12. )
  13.  
  14. [secondary] => Array
  15. (
  16. [lifeCover] => 0
  17. )
  18.  
  19. [DOC] => Array
  20. (
  21. [sictypedis] => -cos-
  22. [sicdis] => -cos-
  23.  
  24. )
  25.  
  26. )
  27.  
  28. [1] => Array
  29. (
  30. [company] => Firma
  31. [type] => Term Life Insurance
  32. [no] => 0
  33. [issueDate] => 2019-06-01
  34. [used] => yes
  35. [primary] => Array
  36. (
  37. [lifeCover] => 70,000
  38. )
  39.  
  40. [secondary] => Array
  41. (
  42. [lifeCover] => 50,000
  43. )
  44.  
  45. [DOC] => Array
  46. (
  47. [sictypedis] => -cos-
  48. [sicdis] => -cos-
  49.  
  50. )
  51.  
  52. )
  53.  
  54. )


Nie chcę dodatkowo zamętlać, ale nie rozumiem dlaczego są utworzone puste zmienne
  1. private $groups = array()
  2. private $group1 = array();

ect a potem w funkcji trzeba oczywiście uzyskać dostęp do nich przez $this->group ... Czy to jest kwestia dobrej praktyki? Bo wszystko też mi działa jak usunę te zmienne private i w funkcji będę je tworzył jako $group1, $group2 ect..

No i tak jak już pytałem wcześniej, chicałbym, aby ten fragment kodu generował się dla każdej polisy typu TerLifIns ... Czyli żeby $this->group5_1 a dla kolejnej $this->group5_2 ect...
  1. $this->group5 = array (
  2. 'common4' => array (
  3. 'name' => '&bull; Rekomendacja Life Term + Mortgage',
  4. 'elements'=> array (
  5. 'multiText' => array(
  6. 'type' => 'textMulti',
  7. 'label' => 'Lebel Sekcji',
  8. 'optional' => true, // false -> bez checkbox
  9. 'partitions' => $this->getData($documentData)
  10. ),
  11. ),
  12. ),
  13. );


===EDIT 06/04/2021 ===

Czy brak sugestii oznaczą, że moje pytanie:
a) jest zbyt trywialne?
b) jest zbyt zawiłe, a odpowiedź skomplikowana (wymaga obszernej modyfikacji kodu)?
c) zostało zadane nieprawidłowo?
d) nieprawidłowo kontynuuję post, w którym zaznaczyłem już "Pomógł" i powinienem otworzyć nowy temat?
nospor
Ja nie kumam o co pytasz. Jakos to skomplikowane do zrozumienia wink.gif
Po co w ogole tworzysz prywaten group1...group5? Czemu nie zrobisz z tego tablicy wielowymiarowej?
pela222
Ok. Nie jestem autorem tego kodu, a jedynie modyfikuję go pod swoje potrzeby.
Zadałem gdzieś tam wcześniej pytanie: dlaczego w ogóle są utworzone te zmienne private? Jak jest tego sens? Czy to wynika z dobrych praktyk? Inne powody? Bo jak usunę te zmienne private i zamienię
  1. $this->group1 = &array(...)
  2. na
  3. $group1 = array(...
)
wewnątrz
  1. public function __construct(DocumentData $documentData = null)

to wszytko działa tak samo...

Co do twojej sugestii / podpowiedzi o utworzeniu tych zmiennych w tablicy wielowymiarowej ...to daj mi czas na przetrawienie, bo na razie nie wiem co masz na myśli ..To znaczy wiem co to tablica wielowymiarowa, ale nie wiem jak to się ma, do rozwiązania mojego problemu...
nospor
Mi nie chodzilo stricte o zmienne prywatne, tylko czemu masz 5 zmiennych group1, group2.... group5
Czemu poprostu nie zrobisz z tego tablicy?
pela222
Ponieważ na podstawie tak stworzonej tablicy ze zmiennymi group tworze dynamicznie formularz html
Screen shot formularza html
i każda z zakładek HTML po lewej na tym screenshot (element listy nienumerowanej <li>) odpowiada kolejnej zmiennej group.

Czyli mam powiedzmy:
group1 -> "Wprowadzenie"
group2 -> "Potrzeby i Cele"
...
group5 -> "Term life + Mortgage"
group6 -> "Personal Accident"
group7 -> "Whole of Life"
...

A chciałbym, że jak mam więcej niż jedną polisę o typie Term Life + Mortgage" to żeby dla każdej było group51, group52 ect
Teraz iteruje mi po tych "wiecej niż jednej", ale wszystko jest w ramach group5 ... co Powoduje że dostaje tablicę w innej formie niż chcę.

Czyli jeśli mam 2 polisy o typie Term Life to generuje w ramach group5

  1. $this->group5 = array (
  2. 'common4' => array (
  3. 'name' => '? Rekomendacja Life Term + Mortgage',
  4. 'elements'=> array (
  5. 'multiText' => array(
  6. 'type' => 'textMultiList',
  7. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  8. 'optional' => true, // false -> bez checkbox
  9. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[1]
  10. ),
  11. 'multiText1' => array(
  12. 'type' => 'textMultiList',
  13. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  14. 'optional' => true, // false -> bez checkbox
  15. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[2]
  16. ),
  17. 'multiText2' => array(
  18. 'type' => 'textMultiList',
  19. 'label' => 'Opis Ubezpieczyciela',
  20. 'optional' => true, // false -> bez checkbox
  21. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[3]
  22. ),
  23. ),
  24. ),
  25. );


Tak że w ramach:
group5 mam teraz:
common4->elements->multiText->partitions mam opis nr1 dla kolejnych polis (jednej, dwóch lub więcej)
common4->elements->multiText1->partitions mam opis nr2 dla kolejnych polis (jednej, dwóch lub więcej)
common4->elements->multiText2->partitions mam opis nr3 dla kolejnych polis (jednej, dwóch lub więcej).

A chciałbym, aby to iterowanie odbywało się na poziomie zmiennej group

Czyli, abym otrzymywał:
group5_1
common4->elements->multiText->partitions mam opis nr1 dla pierwszej polisy
common4->elements->multiText1->partitions mam opis nr2 dla pierwszej polisy
common4->elements->multiText2->partitions mam opis nr3 dla pierwszej polisy

group5_2
common4->elements->multiText->partitions mam opis nr1 dla kolejnej polisy
common4->elements->multiText1->partitions mam opis nr2 dla kolejnej polisy
common4->elements->multiText2->partitions mam opis nr3 dla kolejnej polisy
...

I dzięki temu powstanie mi kilka sekcji HTML (dla każdej polisy Life Term + Mortgage osobno).

Chiałbym uniknąć tworzenia kolejnego poziomy tablicy dla group5 array () bo znów będą jakieś kombinacje alpejskie przy validacji html z tej tablicy
Czyli tutaj:
  1. foreach ($fields->getGroups() as $tabCode => $properties) {
  2. $tabNavHTML .= '<li><a href="#' . $tabCode . '" aria-controls="' . $tabCode . '" role="tab" data-toggle="tab">' . $properties['name'] . '</a></li>';
  3. $tabContentHtml .= '<div role="tabpanel" class="fields-container tab-pane row ' . (($i == 0) ? 'active' : '') . '" id="' . $tabCode . '">';
  4. if (!array_key_exists('elements', $properties)) {
  5. continue;
  6. }
  7. foreach ($properties['elements'] as $elementName => $definition) {
  8. /*
  9.   * walidator pól
  10.   */
  11. }
nospor
Dlatego ci mowie zrob z tego tablice z grupami. Latwiej sie lata po takiej tablicy niz po pieciu zmiennych. Tablica jest uniwersalna, zmienne nie. Jak ci dojdze group6 kiedys, to w tablicy bez problemu to obsluzysz
pela222
Wiem że teraz to pewnie załamiesz ręce ale mam stworzone na końcu tablice z grupami dla tej public function __construct(DocumentData $documentData = null)
  1. $this->groups = $group1 + $group2 + $this->group3 + $this->group4 + $this->group5 + $this->group6 + $this->group7 + $this->group8;
  2.  
  3. public function getGroups() {
  4. return $this->groups;
  5. }

nospor
Hehe, no zalamalem wink.gif
pela222
No się pośmialiśmy z mojego dyletanctwa i braku wiedzy oraz doświadczenia facepalmxd.gif ,ale tak to wygląda jak wrzucisz amatora w obszerny kawałek kodu ... a tak jast ze mną i moim trudnym przypadkiem smile.gif


Natomiast wracając do twojej sugestii:
Cytat
"zrob z tego tablice z grupami"

to liczę na pomocne koło ... taki "telefon do przyjaciela" w ramach mocno naciąganej wyrozumiałości.
nospor
Nie. Caly czas ci mowie: Nie tysiac zmiennych dla group, bez roznicy czy private czy nie private, a JEDNA tablica z grupami.
pela222
Jeśli o to chodziło to nie rozumiem co to wnosi...
  1. //
  2. private $groups = array();
  3.  
  4. public function __construct(DocumentData $documentData = null) {
  5.  
  6. if (!$documentData) {
  7. $documentData = new DocumentData();
  8. }
  9.  
  10. // pobieranie danych dodatkowych zapisanych w bazie
  11. $dataReader = new AdditionalDataReader();
  12. $additionalData = $dataReader->read();
  13.  
  14. $documentData = $documentData->getData();
  15.  
  16. //throw new Exception('<pre>'.print_r($documentData['policies'],1). '</pre>');
  17.  
  18.  
  19. $this->groups = array (
  20.  
  21. 'common1' => array (
  22. 'name' => '1. Wprowadzenie',
  23. 'elements'=> array (
  24. 'multiText' => array(
  25. 'type' => 'textMulti',
  26. 'label' => 'Wprowadzenie',
  27. 'optional' => true, // false -> bez checkbox
  28. 'partitions' => $this->getIntroData($documentData)
  29. ),
  30. ),
  31. ),
  32. 'textMultiList' => array (
  33. 'name' => '2. Potrzeby i cele',
  34. 'elements'=> array (
  35. 'needs' => array(
  36. 'type' => 'textMultiList',
  37. 'label' => 'Poszukujecie/Poszukujesz ubezpieczenia, które',
  38. 'optional' => true, // false -> bez checkbox
  39. 'partitions' => $this->getNeedsData($documentData)
  40. ),
  41. ),
  42. ),
  43. 'common2' => array (
  44. 'name' => '3. Sytuacja Osobista',
  45. 'elements'=> array (
  46. 'multiText' => array(
  47. 'type' => 'textMulti',
  48. 'label' => 'Osobista',
  49. 'optional' => true, // false -> bez checkbox
  50. 'partitions' => $this->getPersonData($documentData)
  51. ),
  52. ),
  53. ),
  54. 'common3' => array (
  55. 'name' => '4. Sytuacja Finansowa',
  56. 'elements'=> array (
  57. 'multiText' => array(
  58. 'type' => 'textMulti',
  59. 'label' => 'Finansowa',
  60. 'optional' => true, // false -> bez checkbox
  61. 'partitions' => $this->getFinancialData($documentData, $additionalData)
  62. ),
  63. ),
  64. ),
  65. 'common4' => array (
  66. 'name' => '? Rekomendacja Life Term + Mortgage' .$count,
  67. 'elements'=> array (
  68. 'multiText' => array(
  69. 'type' => 'textMultiList',
  70. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  71. 'optional' => true, // false -> bez checkbox
  72. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[1]
  73. ),
  74. 'multiText1' => array(
  75. 'type' => 'textMultiList',
  76. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  77. 'optional' => true, // false -> bez checkbox
  78. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[2]
  79. ),
  80. 'multiText2' => array(
  81. 'type' => 'textMultiList',
  82. 'label' => 'Opis Ubezpieczyciela',
  83. 'optional' => true, // false -> bez checkbox
  84. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[3]
  85. ),
  86. ),
  87. ),
  88. 'common7' => array (
  89. 'name' => '? Rekomendacja Whole of Life',
  90. 'elements'=> array (
  91. 'multiText' => array(
  92. 'type' => 'textMultiList',
  93. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  94. 'optional' => true, // false -> bez checkbox
  95. 'partitions' => $this->getRecomendationWOL($documentData)[1]
  96. ),
  97. 'multiText1' => array(
  98. 'type' => 'textMultiList',
  99. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  100. 'optional' => true, // false -> bez checkbox
  101. 'partitions' => $this->getRecomendationWOL($documentData)[2]
  102. ),
  103. 'multiText2' => array(
  104. 'type' => 'textMultiList',
  105. 'label' => 'Opis Ubezpieczyciela',
  106. 'optional' => true, // false -> bez checkbox
  107. 'partitions' => $this->getRecomendationWOL($documentData)[3]
  108. ),
  109. ),
  110. ),
  111. );
  112. //throw new Exception('<pre>' . print_r($_POST, 1) . '</pre>');
  113. throw new Exception('<pre>' . print_r($this->groups, 1) . '</pre>');
  114. }
  115.  
  116. public function getGroups() {
  117. return $this->groups;
  118. }


Kiedyś tak to miałem (plik oryginalny przed moimi modyfikacjami).
Poprzez stworzenie wielu zmiennych group i łącznie tych tablic w jeden array dostawałem taką samą tablice jak przy jednej tablicy z grupami a dodatkowo miałem możliwość dodania warunków if dla różnych typów polis (if ($type == 'TerLifIns' || $type == 'MorIns') ...teraz nie mogę / nie potrafię tego zrobić. Czyli że dana <li> w HTML generowało mi tylko jeśli istniał dany typ polisy.

Jeśli jest to jako jedna tablica to nie mam warunków if to dostaje błąd jeśli dany typ nie istnieje. Wcześniej było to rozwiązane poprzez:
  1. if ($type == 'WOL') {
  2. $this->group7 = array (
  3. 'common7' => array (
  4. 'name' => '? Rekomendacja Whole of Life',
  5. 'elements'=> array (
  6. 'multiText' => array(
  7. 'type' => 'textMultiList',
  8. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  9. 'optional' => true, // false -> bez checkbox
  10. 'partitions' => $this->getRecomendationWOL($documentData)[1]
  11. ),
  12. 'multiText1' => array(
  13. 'type' => 'textMultiList',
  14. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  15. 'optional' => true, // false -> bez checkbox
  16. 'partitions' => $this->getRecomendationWOL($documentData)[2]
  17. ),
  18. 'multiText2' => array(
  19. 'type' => 'textMultiList',
  20. 'label' => 'Opis Ubezpieczyciela',
  21. 'optional' => true, // false -> bez checkbox
  22. 'partitions' => $this->getRecomendationWOL($documentData)[3]
  23. ),
  24. ),
  25. ),
  26. // );
  27. // }


No a teraz jeśli klient nie ma polisy o typie WOL to dostaje błąd dla zmiennej $common7. Przy rozbiciu na wiele zmiennych group rozwiązywałem to jak wyżej i dostawałem w html <li> dla common7 "Rekomendacja Whole of Life" dla tej grupy ($group7).
nospor
Ano to wnosi, ze jest latwiejsze do pracy wink.gif
Nie rozumiem twojego problemu z IF. Co ma piernik do wiatraka?

ps: no i w twojej nowej tablicy nie widze nigdzie indeksow group1, group2... etc. moze temu ci nie dziala wink.gif
pela222
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.
gino
można tak dodać do tablicy w zależności od warunku WOL:

Kod
        $this->groups = array (

            'common1' => array (
                'name' => '1. Wprowadzenie',
                'elements'=> array (
                    'multiText' => array(
                        'type' => 'textMulti',
                        'label' => 'Wprowadzenie',
                        'optional' => true, // false -> bez checkbox
                        'partitions' => $this->getIntroData($documentData)
                    ),
                ),
            ),
            'textMultiList' => array (
                'name' => '2. Potrzeby i cele',
                'elements'=> array (
                    'needs' => array(
                        'type' => 'textMultiList',
                        'label' => 'Poszukujecie/Poszukujesz ubezpieczenia, które',
                        'optional' => true, // false -> bez checkbox
                        'partitions' => $this->getNeedsData($documentData)
                    ),
                ),
                ),
                
                
            );
            
            if($type == 'WOL') {
                      
                $wol = array (
                'common7' => array (
                    'name' => '? Rekomendacja Whole of Life',
                    'elements'=> array (
                        'multiText' => array(
                            'type' => 'textMultiList',
                            'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationWOL($documentData)[1]
                        ),
                        'multiText1' => array(
                            'type' => 'textMultiList',
                            'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
                            'optional' => true
                        ),
                        'multiText2' => array(
                            'type' => 'textMultiList',
                            'label' => 'Opis Ubezpieczyciela',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationWOL($documentData)[3]
                        ),
                    ),
                    ),
                );
            $groups = array_merge($groups, $wol);
                
            };


itd...

ups...
oczywiście

Kod
$this->groups = array_merge($this->groups, $wol);


pela222
No tak można bo tak to miałem ... co prawda miałem troche bez sensu dla każdej "sekcji" ale tak to było zrobione.
@nospor zasugerował, żeby się tego pozbyć, bo "łatwiej" jest pracować na tablicy bez tych grup ... No ale nie wiem jak jest łatwiej i jak to łatwiej realizować.
No i cały czas pozostaje temat podstawowy (od którego zacząłem pytanie), czyli jak iterować, jeśli jest wiecej niż jedna polisa danego typu, aby tworzyły się kolejne common. Czyli jeśli są dwie polisy WOL to tworzą się w tablicy:
common7_1 array()
common7_2 array().
Co będzie skutkowało utworzeniem dwóch <li> w formularzu html (dla każdej z tych polis osobno).
gino
Cytat
@nospor Mi nie chodzilo stricte o zmienne prywatne, tylko czemu masz 5 zmiennych group1, group2.... group5
Czemu poprostu nie zrobisz z tego tablicy?

O to mu chodziło, co napisał. Jedna tablica wielowymiarowa zamiast kilku(nastu) zmiennych group
pela222
Ale wcześniej też tworzyłem jedną tablicę wielowymiarową.
  1. $this->groups = $this->group1 + $this->group2 + $this->group3 + $this->group4 + $this->group5 + $this->group6 + $this->group7 + $this->group8;


No i napisał że załamuje ręce i że nie o takie sumowanie tablic mu chodzi.

Fakt, że bez sensu była ilość tych zmiennych i wystarczy stworzyć je dla typów polis (bo całą pierwsze część tabeli tego nie potrzebuje), ale było tak jak ty teraz sugerujesz...
Fakt, że te zmienne nie muszą być private (No, ale tu też nospor pisał że nii chodzi o to czy są private czy nie private)
Dlatego myślałem że nospor sugerował jakieś inne "lepsze" "łatwiejsze" jak to pisał rozwiązanie.
gino
Jak sam napisałeś
Cytat
Kiedyś tak to miałem (plik oryginalny przed moimi modyfikacjami).
Poprzez stworzenie wielu zmiennych group i łącznie tych tablic w jeden array dostawałem taką samą tablice jak przy jednej tablicy z grupami a dodatkowo miałem możliwość dodania warunków if dla różnych typów polis (if ($type == 'TerLifIns' || $type == 'MorIns') ...teraz nie mogę / nie potrafię tego zrobić. Czyli że dana <li> w HTML generowało mi tylko jeśli istniał dany typ polisy.


Więc pytanie było po co tyle zmiennych, jak można od razu zbudować tablice wielowymiarową, tylko po to, aby później zrobić z tego taka tablicę? Bez sensu.

Cytat
dodatkowo miałem możliwość dodania warunków if dla różnych typów polis (if ($type == 'TerLifIns' || $type == 'MorIns') ...teraz nie mogę / nie potrafię tego zrobić


Jak to zrobić w tablicy wielowymiarowej napisałem jak można.
pela222
  1. // Tutaj zaczyna się sekcja budowania formularza
  2. private $groups = array();
  3. private $intro = array();
  4. private $termlife = array();
  5. private $hive = array();
  6. private $mcpc = array();
  7. private $wol = array();
  8.  
  9. public function __construct(DocumentData $documentData = null) {
  10.  
  11. if (!$documentData) {
  12. $documentData = new DocumentData();
  13. }
  14.  
  15. // pobieranie danych dodatkowych zapisanych w bazie
  16. $dataReader = new AdditionalDataReader();
  17. $additionalData = $dataReader->read();
  18.  
  19. $documentData = $documentData->getData();
  20.  
  21. $this->intro = array (
  22. 'common1' => array (
  23. 'name' => '? Wprowadzenie',
  24. 'elements'=> array (
  25. 'multiText' => array(
  26. 'type' => 'textMulti',
  27. 'label' => 'Wprowadzenie',
  28. 'optional' => true, // false -> bez checkbox
  29. 'partitions' => $this->getIntroData($documentData)
  30. ),
  31. ),
  32. ),
  33. 'textMultiList' => array (
  34. 'name' => '? Potrzeby i cele',
  35. 'elements'=> array (
  36. 'needs' => array(
  37. 'type' => 'textMultiList',
  38. 'label' => 'Poszukujecie/Poszukujesz ubezpieczenia, które',
  39. 'optional' => true, // false -> bez checkbox
  40. 'partitions' => $this->getNeedsData($documentData)
  41. ),
  42. ),
  43. ),
  44. 'common2' => array (
  45. 'name' => '? Sytuacja Osobista',
  46. 'elements'=> array (
  47. 'multiText' => array(
  48. 'type' => 'textMulti',
  49. 'label' => 'Osobista',
  50. 'optional' => true, // false -> bez checkbox
  51. 'partitions' => $this->getPersonData($documentData)
  52. ),
  53. ),
  54. ),
  55. 'common3' => array (
  56. 'name' => '? Sytuacja Finansowa',
  57. 'elements'=> array (
  58. 'multiText' => array(
  59. 'type' => 'textMulti',
  60. 'label' => 'Finansowa',
  61. 'optional' => true, // false -> bez checkbox
  62. 'partitions' => $this->getFinancialData($documentData, $additionalData)
  63. ),
  64. ),
  65. ),
  66. );
  67. foreach ($documentData['policies'] as $type => $policieType) {
  68. foreach ($policieType as $policy) {
  69. // dla typu TerLifeIns
  70. if ($type == 'TerLifIns' || $type == 'MorIns') {
  71. $this->termlife = array (
  72. 'common4' => array (
  73. 'name' => '? Rekomendacja Life Term + Mortgage' .$count,
  74. 'elements'=> array (
  75. 'multiText' => array(
  76. 'type' => 'textMultiList',
  77. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  78. 'optional' => true, // false -> bez checkbox
  79. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[1]
  80. ),
  81. 'multiText1' => array(
  82. 'type' => 'textMultiList',
  83. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  84. 'optional' => true, // false -> bez checkbox
  85. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[2]
  86. ),
  87. 'multiText2' => array(
  88. 'type' => 'textMultiList',
  89. 'label' => 'Opis Ubezpieczyciela',
  90. 'optional' => true, // false -> bez checkbox
  91. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[3]
  92. ),
  93. ),
  94. ),
  95. );
  96. }
  97.  
  98. // dla Hive
  99. if ($type == 'PerAcc' || $type =='AccSicAndHos' || $type == 'MedCas') {
  100. $this->hive = array (
  101. 'common6' => array (
  102. 'name' => '? Rekomendacja Hive',
  103. 'elements'=> array (
  104. 'multiText' => array(
  105. 'type' => 'textMultiList',
  106. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  107. 'optional' => true, // false -> bez checkbox
  108. 'partitions' => $this->getRecomendationHiveData($documentData)[1]
  109. ),
  110. 'multiText2' => array(
  111. 'type' => 'textMultiList',
  112. 'label' => 'Opis ubezpieczyciela',
  113. 'optional' => true, // false -> bez checkbox
  114. 'partitions' => $this->getRecomendationHiveData($documentData)[3]
  115. ),
  116.  
  117. ),
  118. ),
  119. );
  120. }
  121.  
  122. // dla Whole of Life
  123. if ($type == 'WOL') {
  124. $this->wol = array (
  125. 'common7' => array (
  126. 'name' => '? Rekomendacja Whole of Life',
  127. 'elements'=> array (
  128. 'multiText' => array(
  129. 'type' => 'textMultiList',
  130. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  131. 'optional' => true, // false -> bez checkbox
  132. 'partitions' => $this->getRecomendationWOL($documentData)[1]
  133. ),
  134. 'multiText1' => array(
  135. 'type' => 'textMultiList',
  136. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  137. 'optional' => true, // false -> bez checkbox
  138. 'partitions' => $this->getRecomendationWOL($documentData)[2]
  139. ),
  140. 'multiText2' => array(
  141. 'type' => 'textMultiList',
  142. 'label' => 'Opis Ubezpieczyciela',
  143. 'optional' => true, // false -> bez checkbox
  144. 'partitions' => $this->getRecomendationWOL($documentData)[3]
  145. ),
  146. ),
  147. ),
  148. );
  149. }
  150. // // dla MCPC
  151. if ($type == 'MulClaProCov') {
  152. $this->mcpc = array (
  153. 'common8' => array (
  154. 'name' => '? Rekomendacja Multi-claim',
  155. 'elements'=> array (
  156. 'multiText' => array(
  157. 'type' => 'textMultiList',
  158. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  159. 'optional' => true, // false -> bez checkbox
  160. 'partitions' => $this->getRecomendationMCPC($documentData)[1]
  161. ),
  162. 'multiText1' => array(
  163. 'type' => 'textMultiList',
  164. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy',
  165. 'optional' => true, // false -> bez checkbox
  166. 'partitions' => $this->getRecomendationMCPC($documentData)[2]
  167. ),
  168. 'multiText2' => array(
  169. 'type' => 'textMultiList',
  170. 'label' => 'Opis Ubezpieczyciela',
  171. 'optional' => true, // false -> bez checkbox
  172. 'partitions' => $this->getRecomendationMCPC($documentData)[3]
  173. ),
  174. ),
  175. ),
  176. );
  177. }
  178. }
  179. }
  180.  
  181. $this->groups = $this->intro + $this->termlife + $this->hive + $this->wol + $this->mcpc;
  182. //throw new Exception('<pre>' . print_r($this->groups, 1) . '</pre>');
  183.  
  184. }
  185.  
  186. public function getGroups() {
  187. return $this->groups;
  188. }


No to poza tym, że mam teraz w jednej zmiennej $intro kilka wcześniej rozbitych zmiennych group, to wylądowałem na tym samym co na początku...
Poczekam na reakcję nospor ale obawiam się facepalmxd.gif
gino
Po mojemu to tak:
Kod
    private $groups = array();

    public function __construct(DocumentData $documentData = null) {

        if (!$documentData) {
            $documentData = new DocumentData();
        }
$this->groups= array (
            'common1' => array (
                'name' => '? Wprowadzenie',
                'elements'=> array (
                    'multiText' => array(
                        'type' => 'textMulti',
                        'label' => 'Wprowadzenie',
                        'optional' => true, // false -> bez checkbox
                        'partitions' => $this->getIntroData($documentData)
                    ),
                ),
            ),
            'textMultiList' => array (
                'name' => '? Potrzeby i cele',
                'elements'=> array (
                    'needs' => array(
                        'type' => 'textMultiList',
                        'label' => 'Poszukujecie/Poszukujesz ubezpieczenia, które',
                        'optional' => true, // false -> bez checkbox
                        'partitions' => $this->getNeedsData($documentData)
                    ),
                ),
            ),
            'common2' => array (
                'name' => '? Sytuacja Osobista',
                'elements'=> array (
                    'multiText' => array(
                        'type' => 'textMulti',
                        'label' => 'Osobista',
                        'optional' => true, // false -> bez checkbox
                        'partitions' => $this->getPersonData($documentData)
                    ),
                ),
            ),
            'common3' => array (
                'name' => '? Sytuacja Finansowa',
                'elements'=> array (
                    'multiText' => array(
                        'type' => 'textMulti',
                        'label' => 'Finansowa',
                        'optional' => true, // false -> bez checkbox
                        'partitions' => $this->getFinancialData($documentData, $additionalData)
                    ),
                ),
            ),
        );
    foreach ($documentData['policies'] as $type => $policieType) {
        foreach ($policieType as $policy) {
            // dla typu TerLifeIns
            if ($type == 'TerLifIns' || $type == 'MorIns') {      
                $termlife = array (    
                    'common4' => array (
                        'name' => '? Rekomendacja Life Term + Mortgage' .$count,
                        'elements'=> array (
                            'multiText' => array(
                                'type' => 'textMultiList',
                                'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
                                'optional' => true, // false -> bez checkbox
                                'partitions' => $this->getRecomendationTerLifInsData($documentData)[1]
                            ),
                            'multiText1' => array(
                                'type' => 'textMultiList',
                                'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
                                'optional' => true, // false -> bez checkbox
                                'partitions' => $this->getRecomendationTerLifInsData($documentData)[2]
                            ),
                            'multiText2' => array(
                                'type' => 'textMultiList',
                                'label' => 'Opis Ubezpieczyciela',
                                'optional' => true, // false -> bez checkbox
                                'partitions' => $this->getRecomendationTerLifInsData($documentData)[3]
                            ),
                        ),
                    ),
                );
                $this->groups = array_merge($this->groups, $termlife);
            }

            // dla Hive
            if ($type == 'PerAcc' || $type =='AccSicAndHos' || $type == 'MedCas') {      
            $hive = array (    
                'common6' => array (
                    'name' => '? Rekomendacja Hive',
                    'elements'=> array (
                        'multiText' => array(
                            'type' => 'textMultiList',
                            'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationHiveData($documentData)[1]
                        ),
                        'multiText2' => array(
                            'type' => 'textMultiList',
                            'label' => 'Opis ubezpieczyciela',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationHiveData($documentData)[3]
                        ),

                    ),
                ),
            );
            $this->groups = array_merge($this->groups, $hive);
            }

            // dla Whole of Life
            if ($type == 'WOL') {      
            $wol = array (    
                'common7' => array (
                    'name' => '? Rekomendacja Whole of Life',
                    'elements'=> array (
                        'multiText' => array(
                            'type' => 'textMultiList',
                            'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationWOL($documentData)[1]
                        ),
                        'multiText1' => array(
                            'type' => 'textMultiList',
                            'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationWOL($documentData)[2]
                        ),
                        'multiText2' => array(
                            'type' => 'textMultiList',
                            'label' => 'Opis Ubezpieczyciela',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationWOL($documentData)[3]
                        ),
                    ),
                ),
            );
            $this->groups = array_merge($this->groups, $wol);
            }
//            // dla MCPC
            if ($type == 'MulClaProCov') {      
            $mcpc = array (    
                'common8' => array (
                    'name' => '? Rekomendacja Multi-claim',
                    'elements'=> array (
                        'multiText' => array(
                            'type' => 'textMultiList',
                            'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationMCPC($documentData)[1]
                        ),
                        'multiText1' => array(
                            'type' => 'textMultiList',
                            'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationMCPC($documentData)[2]
                        ),
                        'multiText2' => array(
                            'type' => 'textMultiList',
                            'label' => 'Opis Ubezpieczyciela',
                            'optional' => true, // false -> bez checkbox
                            'partitions' => $this->getRecomendationMCPC($documentData)[3]
                        ),
                    ),
                ),
            );
            $this->groups = array_merge($this->groups, $mpc);
            }
        }
    }

    }
        public function getGroups() {
        return $this->groups;
    }


edit poprawka literówek :0
pela222
No ma to sens zdecydowanie większy niż to co ja napłodziłem.

I pytanie smile.gif ostateczne smile.gif

Jak iterować jeśli istnieje wiecej niż jedna polisa o tym samym typie.

Czyli chodzi o to żeby uzyskać taką strukturę:

  1. [common7_1] => Array
  2. (
  3. [name] => ? Rekomendacja Whole of Life dla PIERWSZEJ POLISY WOL
  4. [elements] => Array
  5. (
  6. [multiText] => Array
  7. (
  8. [type] => textMultiList
  9. [label] => Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie
  10. [optional] => 1
  11. [partitions] => Array
  12. (
  13. [0] => Array
  14. (
  15. [0] => Podstawowe elementy ubezpieczenia zarekomendowane dla (Chester Tester) na ubezpieczeniu z firmą Royal London to:
  16. )
  17.  
  18. [1] => Array
  19. (
  20. [0] => Utraty życia, gdzie rekomendowana suma ubezpieczenia dla Chester to ?120,000. ...
  21. )
  22. )
  23. )
  24.  
  25. [multiText1] => Array
  26. (
  27. [type] => textMultiList
  28. [label] => Dodatkowo omówiono i zaproponowano następujące cechy i elementy:
  29. [optional] => 1
  30. [partitions] => Array
  31. (
  32. [0] => Array
  33. (
  34. [0] => --INDEKSAJCA DO WYBORU MANUALNIE--
  35. )
  36.  
  37. [1] => Array
  38. (
  39. [0] => Ubezpieczenie zawiera opcję indeksacji....
  40. )
  41. )
  42. )
  43. )
  44. )
  45. [common7_2] => Array
  46. (
  47. [name] => ? Rekomendacja Whole of Life dla DRUGIEJ POLISY WOL
  48. [elements] => Array
  49. (
  50. [multiText] => Array
  51. (
  52. [type] => textMultiList
  53. [label] => Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie
  54. [optional] => 1
  55. [partitions] => Array
  56. (
  57. [0] => Array
  58. (
  59. [0] => Podstawowe elementy ubezpieczenia zarekomendowane dla (Chester Tester) na ubezpieczeniu z firmą Royal London to:
  60. )
  61.  
  62. [1] => Array
  63. (
  64. [0] => Utraty życia, gdzie rekomendowana suma ubezpieczenia dla Chester to ?120,000. ...
  65. )
  66. )
  67. )
  68.  
  69. [multiText1] => Array
  70. (
  71. [type] => textMultiList
  72. [label] => Dodatkowo omówiono i zaproponowano następujące cechy i elementy:
  73. [optional] => 1
  74. [partitions] => Array
  75. (
  76. [0] => Array
  77. (
  78. [0] => --INDEKSAJCA DO WYBORU MANUALNIE--
  79. )
  80.  
  81. [1] => Array
  82. (
  83. [0] => Ubezpieczenie zawiera opcję indeksacji....
  84. )
  85. )
  86. )
  87. )
  88. )


Na razie, żeby to osiągnąć to kombinuję w teń deseń:

  1. foreach ($documentData['policies'] as $type => $policieType) {
  2. foreach ($policieType as $policy) {
  3. if ($type == 'TerLifIns' || $type == 'MorIns') {
  4. // throw new Exception('<pre>'.print_r($policieType,1).'</pre>');
  5. $count = count($policieType);
  6. // throw new Exception('<pre>'.print_r($count,1).'</pre>');
  7. $section_name = 'common4_';
  8. for($n=0; $n<$count; $n++){
  9. $var = $section_name . $n;
  10. $termlife = array (
  11. $var => array (
  12. 'name' => '? Rekomendacja Life Term + Mortgage' .$policy[company],
  13. 'elements'=> array (
  14. 'multiText' => array(
  15. 'type' => 'textMultiList',
  16. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  17. 'optional' => true, // false -> bez checkbox
  18. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[1]
  19. ),
  20. 'multiText1' => array(
  21. 'type' => 'textMultiList',
  22. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  23. 'optional' => true, // false -> bez checkbox
  24. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[2]
  25. ),
  26. 'multiText2' => array(
  27. 'type' => 'textMultiList',
  28. 'label' => 'Opis Ubezpieczyciela',
  29. 'optional' => true, // false -> bez checkbox
  30. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[3]
  31. ),
  32. ),
  33. ),
  34. );
  35. $this->groups = array_merge($this->groups, $termlife);
  36. }
  37. // throw new Exception('<pre>'.print_r($this->groups,1).'</pre>');
  38. }

dostaje zmienne common4_X równe ilości polis danego typu...Jeszcze to muszę przetrawić..


====EDYCJA ====

Ok. Chyba ogarnąłem ... Nie wiem czy to jest prawidłowo i zgodnie ze "sztuką" ale działa ... po pierwszych testach. Jutro rano wrzucę kod i poproszę o ocenienie czy to nie jest karkołomne ... bo coś mi się wydaję że za dużo razy puszczam pętle ... No ale to już jutro.

===EDYCJA 09/04 14:45 ===
To jest ostateczna wersja kodu. Uzysłem funkcjonalność o jaką mi chodziło. Ale będę wdzięczny za krytyczne uwagi.

  1. //Sekcja konstuowania zmiennych / słownika
  2. //Rekomendacja Term Life oraz Mortgage Protection
  3. private function getRecomendationTerLifInsData($documentData) {
  4. $TerLifIns = $documentData['policies']['TerLifIns'];
  5. $MorIns = $documentData['policies']['MorIns'];
  6. $policies = array_merge($TerLifIns, $MorIns);
  7. $recomend = array();
  8. $count = count($policies);
  9. for($n=0; $n<$count; $n++){
  10. //Zalecam Wam / Tobie
  11. $recomend[$n][1][] = array('Podstawowe elementy ubezpieczenia zarekomendowane dla ('.$policies[$n]['lifeInsured'].') na ubezpieczeniu z firmą '.$policies[$n]['company'].' to: '); //
  12. $recomend[$n][1][] = array('Utraty życia, gdzie suma ubezpieczenia jaką rekomenduje dla ('.$documentData['primary']['firstName'].' '.$documentData['primary']['lastName'].') to €'.$policies[$n]['primary']['lifeCover']);
  13. $recomend[$n][1][] = array('Poważnej choroby, gdzie rekomendowana kwota ubezpieczenia dla ('.$documentData['primary']['firstName'].' '.$documentData['primary']['lastName'].') to €'.$policies[$n]['primary']['seriousIllness']);
  14. $recomend[$n][1][] = array('Zaproponowany termin ubezpieczenia to '.$policies[$n]['term'].' lat. ');
  15.  
  16. //Dodatkowo omówiono i zaproponowano następujące cechy i elementy
  17. $recomend[$n][2][] = array($policies[$n]['DOC']['indexationdis']);
  18. $recomend[$n][2][] = array($policies[$n]['DOC']['conversiondis']);
  19. $recomend[$n][2][] = array('Gwarancja wysokości składki oznacza, że Wasza składka która wyniesie €'.$policies[$n]['premium'].' i pozostanie niezmienna przez cały okres trwania polisy.');
  20.  
  21. //Opis ubezpieczyciela
  22. foreach ($policies[$n]['DOC']['companydis'] as $value) {
  23. if(!is_array($value)){
  24. $recomend[$n][3][] = array($value);
  25. }
  26. }
  27. }
  28. //throw new Exception('<pre>' . print_r($recomend, 1) . '</pre>');
  29. return $recomend;
  30. }


Aby skrócić trochę kod wyciąłem cześć i ograniczyłem się do jednego typu polisy.
PS. Zostawiłem jeszcze wykomentowany fragment kodu, gdzie poprzez foreach iterowałem po tablicy z wszystkimi typami polis.

  1. // Tutaj zaczyna się sekcja budowania formularza
  2. private $groups = array();
  3.  
  4. public function __construct(DocumentData $documentData = null) {
  5.  
  6. if (!$documentData) {
  7. $documentData = new DocumentData();
  8. }
  9.  
  10. // pobieranie danych dodatkowych zapisanych w bazie
  11. $dataReader = new AdditionalDataReader();
  12. $additionalData = $dataReader->read();
  13.  
  14. $documentData = $documentData->getData();
  15.  
  16. //throw new Exception('<pre>'.print_r($documentData['policies'],1). '</pre>');
  17.  
  18. $this->groups = array (
  19. 'common1' => array (
  20. 'name' => '&bull; Wprowadzenie',
  21. 'elements'=> array (
  22. 'multiText' => array(
  23. 'type' => 'textMulti',
  24. 'label' => 'Wprowadzenie',
  25. 'optional' => true, // false -> bez checkbox
  26. 'partitions' => $this->getIntroData($documentData)
  27. ),
  28. ),
  29. ),
  30. 'textMultiList' => array (
  31. 'name' => '&bull; Potrzeby i cele',
  32. 'elements'=> array (
  33. 'needs' => array(
  34. 'type' => 'textMultiList',
  35. 'label' => 'Poszukujecie/Poszukujesz ubezpieczenia, które',
  36. 'optional' => true, // false -> bez checkbox
  37. 'partitions' => $this->getNeedsData($documentData)
  38. ),
  39. ),
  40. ),
  41. 'common2' => array (
  42. 'name' => '&bull; Sytuacja Osobista',
  43. 'elements'=> array (
  44. 'multiText' => array(
  45. 'type' => 'textMulti',
  46. 'label' => 'Osobista',
  47. 'optional' => true, // false -> bez checkbox
  48. 'partitions' => $this->getPersonData($documentData)
  49. ),
  50. ),
  51. ),
  52. 'common3' => array (
  53. 'name' => '&bull; Sytuacja Finansowa',
  54. 'elements'=> array (
  55. 'multiText' => array(
  56. 'type' => 'textMulti',
  57. 'label' => 'Finansowa',
  58. 'optional' => true, // false -> bez checkbox
  59. 'partitions' => $this->getFinancialData($documentData, $additionalData)
  60. ),
  61. ),
  62. ),
  63. );
  64. // throw new Exception('<pre>'.print_r($this->group1,1). '</pre>');
  65. // $policies = $documentData['policies']['TerLifIns'];
  66. // foreach ($documentData['policies'] as $type => $policieType) {
  67. // foreach ($policieType as $policy) {
  68. // dla typu TerLifeIns
  69. $TerLifIns = $documentData['policies']['TerLifIns'];
  70. $MorIns = $documentData['policies']['MorIns'];
  71. $policies = array_merge($TerLifIns, $MorIns);
  72. // throw new Exception('<pre>' . print_r($policies, 1) . '</pre>');
  73. $count = count($policies);
  74. // if ($type == 'TerLifIns') {
  75. // $count = count($policieType);
  76. $section_name = 'common4_';
  77. for($n=0; $n<$count; $n++){
  78. $var = $section_name . $n;
  79. // throw new Exception('<pre>'.print_r($count,1).'</pre><br><pre>' .print_r($var,1).'</pre>');
  80. $termlife = array (
  81. $var => array (
  82. 'name' => '&bull; Rekomendacja: '.$policies[$n]['type']. ' z ' .$policies[$n]['company'],
  83. 'elements'=> array (
  84. 'multiText' => array(
  85. 'type' => 'textMultiList',
  86. 'label' => 'Na podstawie otrzymanych informacji, zalecam Wam / Tobie ubezpieczenie',
  87. 'optional' => true, // false -> bez checkbox
  88. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[$n][1]
  89. ),
  90. 'multiText1' => array(
  91. 'type' => 'textMultiList',
  92. 'label' => 'Dodatkowo omówiono i zaproponowano następujące cechy i elementy:',
  93. 'optional' => true, // false -> bez checkbox
  94. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[$n][2]
  95. ),
  96. 'multiText2' => array(
  97. 'type' => 'textMultiList',
  98. 'label' => 'Opis Ubezpieczyciela',
  99. 'optional' => true, // false -> bez checkbox
  100. 'partitions' => $this->getRecomendationTerLifInsData($documentData)[$n][3]
  101. ),
  102. ),
  103. ),
  104. );
  105.  
  106. $this->groups = array_merge($this->groups, $termlife);
  107. }
  108. // }
  109. // }
  110. }
  111.  
  112. public function getGroups() {
  113. return $this->groups;
  114. }


Tak jak wyżej. Dziękuję za podpowiedzi czy krytyczne słowa związane z możliwym usprawnieniem.
Szczególnie dziękuje koledze @nospor oraz @gino.
nospor
Strasznie ciezko sie czyta ten kod. Pewnie gino ogarnia to lepiej

Ale to co mi sieteraz rzuca w oczy to nie

$count = count($policies);
for($n=0; $n<$count; $n++){

a poprostu
foreach ($policies as $n=> $policy) {
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.