Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Funkcja zwracająca tablicę danych, jak zmodyfikować funkcje aby otrzymać kilka tablic
pela222
post
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
Post #2





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

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


No ma to sens zdecydowanie większy niż to co ja napłodziłem.

I pytanie (IMG:style_emoticons/default/smile.gif) ostateczne (IMG:style_emoticons/default/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.

Ten post edytował pela222 8.04.2021, 20:42:48
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 Aktualny czas: 11.10.2025 - 23:37